WEB开发网
开发学院网页设计JavaScript 什么是函数式编程 阅读

什么是函数式编程

 2010-09-14 13:13:57 来源:WEB开发网   
核心提示: 你可以将中缀操作符放入括号中来定义函数,下面是定义的和前面的plus函数完全一样:# let plus = (+);;val plus : int -> int -> int = <fun># plus 2 3;;- : int = 5下面还有一些有趣的柯理化:#

你可以将中缀操作符放入括号中来定义函数。下面是定义的和前面的plus函数完全一样:

# let plus = (+);;
val plus : int -> int -> int = <fun>
# plus 2 3;;
- : int = 5

下面还有一些有趣的柯理化:

# List.map (plus 2) [1; 2; 3];;
- : int list = [3; 4; 5]
# let list_of_functions = List.map plus [1; 2; 3];;
val list_of_functions : (int -> int) list = [<fun>; <fun>; <fun>]
函数式编程的优势是什么?

函数式编程,和其他的优秀编程技术一样,它也是你的锦囊中用于解决某几类问题的有效工具。对于设计回调函数——它用多种用户,从GUI到事件驱动的循环——十分方便。对于表达泛型算法也十分好用。List.map就是一个泛型算法,用于将函数应用于任何类型的列表。类似的,你还可以定义处理树的泛型函数。某几种类型的数字问题也可以利用函数式编程更快地解决(例如,用数字计算数学函数派生出来的东西)。

纯粹的和不纯粹的函数式编程

一个纯粹的函数是指没有任何副作用的函数。副作用其实是指函数在其内部保存某种隐藏的状态。C中,strlen是一个纯函数的很好的例子。如果你对同样的字符串多次调用strlen,它总是返回同样的长度值。strlen的输出(长度)仅由其输入(字符串)决定,不依赖于任何其他东西。但不幸的是,C中很多函数都是不纯的。例如,malloc——如果你用同样的数字对其进行调用,它肯定都不会返回同样的指针给你。malloc当然还依赖于很多隐藏的内部状态(堆上分配的对象、使用的分配方法、从操作系统抓取页,等等)。

上一页  1 2 3 4 5 6 7  下一页

Tags:什么 函数 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接