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

什么是函数式编程

 2010-09-14 13:13:57 来源:WEB开发网   
核心提示: 现在看一下recevier_fn的定义,这个函数正是一个闭包因为它保存了一个从其环境中引入的chan的引用,什么是函数式编程(3),部分函数的应用以及柯里化让我们定义一个将两数相加的加法函数:let plus a b =a + b;;下面给在教室后面睡觉的家伙们一些问题:plus是什么?

现在看一下recevier_fn的定义。这个函数正是一个闭包因为它保存了一个从其环境中引入的chan的引用。

部分函数的应用以及柯里化

让我们定义一个将两数相加的加法函数:

let plus a b =
 a + b
 ;;

下面给在教室后面睡觉的家伙们一些问题:

plus是什么?

plus 2 3是什么?

plus 2是什么?

问题 1 很简单。plus是一个函数,它接受两个整数参数并返回一个整数。类型是这么写的:

plus : int -> int -> int

问题 2 就更简单了。plus 2 3是一个数字,整数5。类型是这么写的:

5 : int

但问题 3 怎么回答呢?貌似plus 2是一个错误。然而,实际上,并非如此。如果我们在OCaml的顶层输入这个表达式,那么它会告诉我们:

# plus 2;;
- : int -> int = <fun>

这不是一个错误。它告诉我们plus 2实际上是一个函数,它接受一个int并返回一个int。这是怎样的一个函数呢?首先我们给这个函数起个名字叫做(f),然后再进行一些实验,给它一些整数看看会发生什么:

# let f = plus 2;;
val f : int -> int = <fun>
# f 10;;
- : int = 12
# f 15;;
- : int = 17
# f 99;;
- : int = 101

在工程中,我们有足够的证据说plus 2就是将2加上另一个数的函数。

回到原来的定义,让我们“填入”第一个参数(a)2,则获得了:

let plus 2 b =    (* 这不是真正的OCaml代码! *)
 2 + b
 ;;

我希望你可以了解为何plus 2就是一个函数。

看一下这些表达式的类型也许就能够一窥函数类型中用到的奇怪的->箭头记号的原理:

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

Tags:什么 函数 编程

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