学习common lisp 笔记二

学了几章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++是一样的。


以上只是初步的心得,强大的宏仍然需要重点学习。

你可能感兴趣的:(java,编程,function,lisp)