學習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++是一樣的。


以上只是初步的心得,強大的宏仍然需要重點學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章