###### 函数式编程扫盲篇

1. 概论

2. 什么是函数式编程

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

3. 从并发说开来

4. 变量的不变性

class Account:
def __init__(self,balance):
self.balance = balance
def desposit(self,amount):
self.balance = self.balance + amount
return self.balance
def despositTwice(self):
self.balance = self.balance * 2
return self.balance

if __name__ == '__main__':
account = Account(100)
print(account.desposit(10))
print(account.despositTwice())

def makeAccount(balance):
global desposit
global despositTwice
def desposit(amount):
result = balance + amount
return result
def despositTwice():
result = balance * 2
return result
def dispatch(method):
return eval(method)
return dispatch

if __name__ == '__main__':
handler = makeAccount(100)
print(handler('desposit')(10))
print(handler('despositTwice')())

5. 再看函数式编程的崛起

1、集成电路芯片上所集成的电路的数目，每隔18个月就翻一番。

2、微处理器的性能每隔18个月提高一倍，而价格下降一半。

3、用一个美元所能买到的电脑性能，每隔18个月翻两番。

6. 函数式编程的第一型

def Filt(arr,func):
result = []
for item in arr:
result.append(func(item))
return result

def MyFilter(ele):
if ele < 0 :
return 0
return ele

if __name__ == '__main__':
arr = [-5,3,5,11,-45,32]
print('%s' % (Filt(arr,MyFilter)))

• 接受一个或多个函数作为输入
• 输出一个函数

if __name__ == '__main__':
arr = [-5,3,5,11,-45,32]
func = MyFilter
print('%s' % (Filt(arr,func)))

if __name__ == '__main__':
arr = [-5,3,5,11,-45,32]
print('%s' % (map(lambda x : 0 if x<0 else x ,arr)))

7. 函数式编程的数学本质

8. 函数式编程的抽象本质

9.状态到底怎么办

ps：在Erlang中，进程之间的交互传递变量是靠“信箱”的收发信件来实现，其实我们想一想，从本质而言，也是将变量作为一个附属品来传递么！

def expr(x,n):
result = 1
for i in range(1,n+1):
result = result * x
return result

if __name__ == '__main__':
print(expr(2,5))

def expr(num,n):
if n==0:
return 1
return num*expr(num,n-1)

if __name__ == '__main__':
print(expr(2,5))

10. 函数式编程和递归

def Fib(a):
if a==0 or a==1:
return 1
else:
return Fib(a-2)+Fib(a-1)

def Fib(n):
a=1
b=1
n = n - 1
while n>0:
temp=a
a=a+b
b=temp
n = n-1
return b

11.  尾递归，伪递归

def Fib(a,b,n):
if n==0:
return b
else:
return Fib(b,a+b,n-1)

12. 惰性求值与并行

take 10 (repeat 1)

def getResult():
a = getA()   //Take a long time
b = getB()   //Take a long time
c = a + b

def Test():
a = raw_input()

13. 函数式编程总览

1. 数学推理

2. 并行程序

#### 【转载】函数式编程扫盲篇

2012-03-14 00:36:24

#### 函数式编程扫盲篇（转）

2013-08-28 09:20:45

#### 代理服务器基本知识

2018年01月12日 252KB 下载

#### fiddler抓包教程

2015年08月13日 2.53MB 下载

#### 函数式编程扫盲

2017-02-23 14:51:46

#### 函数式、响应式编程 - ReactiveCocoa 快速入门

2015-07-23 17:35:52

#### 移动通信网络优化

2013年01月31日 26KB 下载

#### Oracle学习——扫盲篇

2014-09-17 14:47:52

#### App知识扫盲

2017-06-08 10:07:37