- 作者: gigix 2004年06月3日, 星期四 17:47
你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=183479
计算机程序的构造和解释:
Structure and interpretation of Computer Programms. http://mitpress.mit.edu/sicp/full-text/book/book.html
计算机科学的圣经之一...美欧正经学校计算机系的必用教材
emacs下有elisp
哈哈,被大家发现了。闪
说实话,AOP就是一种MetaProgramming,而Lisp就是MetaProgramming的老祖宗。
不过我还是觉得LISP,不仅仅是源代码的形式上的不同,有一些东西更本质一些,而且LISP也够酷的,居然活了这么长时间,只比FORTRAN活的短一些。
AOP之父在他97年关于AOP的论文中的,那个解释横切的例子就是用LISP来解释的,看了半天,事后想想也觉得,好象用LISP更说得深入一些,用其它语言就不那么容易了。
taowen你现在很像当年的透明呀,先一棒子打死再说。lisp这些“出奇伟大的事情”的事情还是不少的。跟语法没有太多的关系,思维角度不同。
感觉没什么东西非用functional的语言不可的,以前也了解过lisp和haskell,感觉没有什么出奇伟大的事情。语法上的便利很容易被大家的不熟悉抵消掉。
----------------------------------------------------------------
一群考古学家在讨论一个秦朝的瓦罐,旁边一个农妇冲他们说这个瓦罐破了不能盛水要来干嘛。
这只是一个比方,不要对号入座。我的意思是说站在不同立场上的人,是不能进行沟通的。函数语言是与过程话的语言截然相不同的思考方式。其实在我们普通的编程里面有很多函数语言的影子,最简单的就是regex,最复杂的就是设计模式。只是我们从来不需要去对这些东西刨根问底,现成的拿来就用罢了,当你深入其中的时候你自然会发现函数语言的价值。
相对于人来说,functional language恰恰是最接近人类思维方式,以及数学地描述形式。functional language,的关键点就在于模式匹配。什么是模式匹配?这个话题可就深奥了。最好去看<公理集合论导引>和<递归论>,这些东西满有趣的。说个最简单的例子吧,自然数集的定义就是一个模式匹配。1,2,3,4...这些最常用的数字是怎么定义出来的?它是这么说的:
-一个自然数是一个集合,记为X;
- 如果集合X是一个自然数,那么它的后继集合X union {X},记为X+,也是一个自然数;
- 空集{},记为0,是一个自然数;
- 所有自然数都是这样产生的。
如果我们做些例子就能看清楚:
0 = {}
1 = 0+ = 0 union {0} = {0} = {{}}
2 = 1+ = 1 union {1} = {0, 1} = {{}, {{}}}
3 = 2+ = 2 union {2} = {0, 1, 2} = {{}, {{}}, {{}, {{}}}}
4 = 3+ = 3 union {3} = {0, 1, 2, 3} = {{}, {{}}, {{}, {{}}}, {{}, {{}}, {{}, {{}}}}}
...
这就是模式匹配,所有functional language的精髓所在。
我没有用过LISP,但通过各种渠道了解的信息来看,LISP代表的是另一种思维方式,同C完全不同的一种思维方式。正如taowen所说,没什么东西非用functional的语言不可的,但学习LISP应该可以获得另一种收获,一种可以借鉴到我们日常工作中的收获。不是有人常说“边界效应”吗,显然学习LISP对于C一族的人来说,可以获益更多。
其实python,groovy中或多或少都有一点函数语言的影子。
另外,Lisp的debug和错误能力并不会弱于其他语言,至于IDE,不是没有,而是国内用得少而很少传播。
现在AI的人很少学LISP,反而Prolog是首选。
autocad中倒有一个visual lisp。
Lisp主要是研究AI的人用的,数学系的人可不会去用这个家伙。
Lisp主要是研究AI的人用的,数学系的人可不会去用这个家伙。
功能都达到的情况下,无非就是源代码的表现形式不同。如果论执行的效率,我想functional的语言情况并不是非常理想。而debug,错误处理,IDE支持等各个方面,functional的支持还是很不行的。
另外,语言之间确实没有什么不可替代的。不过,函数式语言得到的不仅仅是语法上的便利。
在国外lisp的一个变种scheme是计算机系的一门入门课。有一本书"计算机程序的构造和解释(裘宗燕译)"。
这是一本很有意思的书。
感觉没什么东西非用functional的语言不可的,以前也了解过lisp和haskell,感觉没有什么出奇伟大的事情。语法上的便利很容易被大家的不熟悉抵消掉。