Lisp的特性 (评论发不出,只好写一篇新的)

本来是给 Lisp的给力特性 这篇文章的评论,奈何csdn的blog上无法提交,只好新发一篇:

目前我不知道到底与C++的宏(其实也是一样的编译期展开),还有比普通函数的优势在哪。(原谅我才学Lisp没有几天)

====

Lisp 的Macro 与 C++中 Macro 的区别: (原谅我N多年没用过C++) Lisp的语言本身就是 S表达式, Lisp 的Macro直接操作列表,可以应用全部的Lisp语法工具来将输入列表转换成目标的程序列表。
相比较来说 C++的Macro更多只是替换。表达能力上不可同日而语。

Lisp的Macro 可以实现惰性计算,可以实现自己的语法结构, 传递给Macro的参数可以自己控制其求值次数(0次或多次) ,这样就可以自己实现 if , loop 等语法结构。

====

Lisp 与 Haskell 并非同源, Haskell 来自 Miranda , 借鉴了 ML 中的类型推导。 Python的 list comperhension 是来自 haskell, 在 CL中有一个类似的 incf-cl 库可以实现 list comperhension 。 这就是Lisp的强大之处, 它根本就没语法,写出来的就是代码树, Macro就是一个代码生成器。 所以有什么新的语言特性,Lisp都能快速的吸收进来。

Common Lisp 中通过incf-cl 库实现的 list comprehension:

CL-USER(15): (lc (* x x) (<- x (take 10 (range 0 1/3 5)))) (0 1/9 4/9 1 16/9 25/9 4 49/9 64/9 9)


实际上, 后来很重要的 循环、OO、异常处理, 在Lisp中都是通过 macro 实现的。

因此,神马都是浮云, 不服Lisp的,可以自己写个 C++, Java 的预处理扩展, 自己实现各种特性, 只是Lisp将这种能力内置了,缩短了进化语言与普通开发之间的距离。人人都能变成语言的改进者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值