各种语言与函数式编程小结

Functional programming

纯的函数式编程functional
    lisp 、haskell、Erlang、Scheme
有函数式编程思想,对函数式编程提供了部分支持的语言
    Scala、Python、R
原因:适合并行运算-多核计算-云计算-模式匹配

函数式编程概念

First-class Function
所有运算都是表达式expression
不需要变量,没有副作用
纯函数---Pure Function   Side effects 副作用
引用透明--Referential Transparency
不变性--Immutability
递归函数--Recursive Function    Tail recurisive 尾递归
惰性求值--lazy evaluation
Curried Function--      柯里化函数
Anonymous functions     匿名函数
Partial Function        偏函数
Higher order function:  高阶函数:能够接受函数作为参数的函数
Closures                闭包,内层函数引用了外层函数的变量(参数也算变量),
                    然后返回内层函数的情况,称为闭包(Closure)。
                闭包的特点是返回的函数还引用了外层函数的局部变量,
                要正确使用闭包,就要确保引用的局部变量在函数返回后不能变

Scala函数式编程

不是纯函数式编程--  var  val  lazy val
        会自动进行数据类型推导-- Any--AnyVal AnyRef 
函数字面量<function literal>--值函数不能指定返回值类型
匿名函数
        (形参列表) => {函数体}
闭包: 函数和上下文
高阶函数:map() reduce() filter()    flatMap()  fold()

Python与函数式编程

不是纯函数式编程:允许有变量
支持高阶函数:函数可以作为变量传入:map() reduce() filter()
支持闭包:     返回函数
有限度的支持匿名函数:例如lambda x: x * x,关键字lambda表示匿名函数,冒号前面的x表示函数参数。
                        python匿名函数有个限制,就是只能有一个表达式
装饰器:decorator----- 接收一个函数--包装--返回一个新的函数===通过高阶函数返回新函数 @ 语法
    decorator 本质上就是一个高阶函数,
    它接收一个函数作为参数,然后,返回一个新函数。
    使用 decorator 用Python提供的 @ 语法,
    这样可以避免手动编写 f = decorate(f) 这样的代码
        decorator还改变了函数的__doc__等其它属性
        不想改变,就需要把原函数的一些属性复制到新函数中functools:

R 语言与函数式编程

闭包:环境
高阶函数:Reduce()、Filter()、Map() Postion()
         apply  lapply sapply  tapply  mapply eapply rapply
匿名函数  R 语言没有创建命名函数的特殊语法

Java与函数式

JDK8 
匿名类---> Lambda

函数式编程-和-数据处理

输入数据流

迭代操作<外部迭代和内部迭代>---->递归
操作: 筛选 切片 映射
      查找 匹配 规约  数据分组和分区 
并行数据处理--顺序流转化为并行流
模式匹配

终端操作

blogroll

social