- 论坛徽章:
- 0
|
回复 #2 MMMIX 的帖子
在这个帖子:
http://bbs2.chinaunix.net/thread-1415220-1-1.html
二楼下面
- 从抽象的效果来说,他们是同样的。但是从语法上实在是太累赘,Combinator本身抽象的就是算法或者说是业务逻辑,而承载逻辑的最基本单元函数却不是第一等的公民,只能负载在类上进行传递。从OO来说的确不善于抽象逻辑和算法。以前 STL之父说过,不是所有的东西都是对象,算法就不是对象。STL中的用functor抽象算法和FP有些像,但是还只是东施效颦罢了。FP并不长于运算,而是长于逻辑的推导。这种推导,在数学上称为算子空间,什么是算子和算子空间呢?我们数学中知道,f(x),x有定义域 f(x)有值域。而我们把x 的定义域的概念进行扩展,我们把每个函数看成一个集合中的元素。然后将所有算子的集合为抽象空间或者函数空间(也就是说值域这个集合中的每个元素都是一个函数).例如上面的各种各样的term和next就是一系列的算子,他们的集合就叫做抽象空间。一个算子可以看作这个空间里面的一个点,算子的组合即可以看作函数空间中的向量组合。在数学里我们空间的两个点表示a: [x1,y1,z1],b:[x2,y2,z2],他们的组合就成为一个线段,如果有这个线段产生方向就成为一个a->b的向量。因为算子和算子之间也是有方向的,最简单就是运算顺序。那么算子和算子之间就是算子向量。由于算子所作用的集合并没有维数的限制,在函数空间基础上所研究出来算子的各种性质,成为处理用有穷维或者线性空间逼近无穷维集合问题的有力武器。因此我们可以看到其实算子空间本身具有的性质就是N维正交。也就是说每个算子都是独立互不干扰的。他不会有OO那样牵扯不清的各种问题。所以我经常说FP的研究的就是算法的算法。这只是一个简单的实现。Combinator 可以做很多你都想不到的事情,例如最著名的Y Combinator和不动点。这个东西可以说是FP中最精彩的一笔,限于篇幅以及鉴于它让人抓狂的程度我是不准备介绍他们了。
复制代码
我看到上面的一段话,认为Haskell中的函数像一个向量
难道是我理解有误 ?
[ 本帖最后由 izhier 于 2009-4-25 22:15 编辑 ] |
|