函数式编程
介绍
编程语言有量大流派,命令式(imperative)和函数式(functional).
命令式编程语言(比如C, C++, Java, Python等),通过给计算机一系列指令来完成任务,和这些指令配合的是数据的变化,比如声明一个变量a=5,稍后做一些操作,这个a会变成6或者其他值。你可以通过控制指令执行逻辑和流程来完成这样的操作,得到结果。这个过程和计算机本身的设计比较接近。
当代计算机是冯诺伊曼结构的,基于CPU+内存+总线的结构构建整个计算本身。
在纯函数的语言中,你并不是告诉计算机一步一步的指令,而是告诉计算机如何计算。比如说,计算n的阶乘,在纯函数中,描述是n的阶乘=n*n-1的阶乘。
你不能改变一个变量的值,因为你已经声明了a=5,a就是5,无法改变;事实上,在纯函数中,根本就没有变量这个概念。
在纯函数语言中,函数是没有副作用的,对于相同的输入参数,纯函数保证会有相同的输出。
以haskell为例
haskell函数定义的格式
函数名 :: 参数1的类型 -> 参数2的类型 -> ... -> 结果的类型
函数名 参数1 参数2 .. = 函数体
add :: Int -> Int -> Int
add a b = a + b
是不是很类似数学公式:f(x,y)=x+y; 是的,函数式编程语言起源于数学。
lambda表达式
λ表达式是书写函数的一种方式,如下所示:
函数名 :: 参数1的类型 -> 参数2的类型 -> ... -> 结果的类型
函数名 = \参数1 -> \参数2 -> ... -> 函数体
add :: Int -> Int -> Int
add = \a -> \b -> a + b
--简化写法
add = \a b -> a + b
map
数据转换
monand
深入学习的参考材料
待续