学了几章Practical LISP(Practical Common Lisp), 大概悟出LISP的两大优势:
1 LISP作为函数式编程(function programming), 其函数具有很低的耦合性,给定一个函数的输入参数,其输出在任何条件下都保持不变。
LISP代码的书写就用一个函数包裹另外一个(堆)函数。
例子:
(defun prompt-for-cd ()
(make-cd
(prompt-read "Title")
(prompt-read "Artist")
(or (parse-integer (prompt-read "Rating") :junk-allowed t) 0)
(y-or-n-p "Ripped [y/n]: ")))这里的定义了一个函数prompt-for-cd() ,其函数体是另一个函数调用:make-cd,make-cd 的参数又由若干函数组合,像这样一级一级组织起来。
2 使用宏(macro) 生成代码,在语法层次上提高程序的抽象能力。
这里LISP的宏要比C/C++的宏强大的多,有点类似于JAVA的反射,又远超过反射的功能。
例子:
(defmacro backwards (expr) (reverse expr))这个宏把expr中的对象序列反序,但不执行,只返回代码。所以宏的功能在于调用其它函数来生成代码,而不是计算结果。
再由这些生成的代码拼成程序运行。宏生成代码在编译时就已经完成,不占用运行时间,这点和C/C++是一样的。
以上只是初步的心得,强大的宏仍然需要重点学习。
本文深入探讨了LISP编程语言的两大优势:函数式编程和宏技术。通过实例展示了如何利用LISP的函数式编程特性降低代码耦合性,以及宏技术如何在语法层次上提高程序的抽象能力。
1146

被折叠的 条评论
为什么被折叠?



