光阴飞逝,这本书已经看了半个月了。我没想过会这么啃一本英文书,收获良多,疑惑也多。匆匆学习到这一章时,再回头看前面的,恍若隔世。人的忘性还是很大的,如果不使用,终归一定会忘记的。希望自己能将这个爱好坚持下去,在此祭奠遗忘的R和perl。
我是从来看不进去定义的,实例更符合我认识世界的习惯,所以有人想明白什么是函数式编程,请参看维基百科.
关于函数式编程的特性和优点,阮一峰的日志有个比较好的笔记:函数式编程初探.
;the clean, functional part
(defun add-widget (database widget)
(cons widget database))
;the dirty, nonfunctional part
(defparameter *database* nil)
(defun main-loop ()
(loop (princ "Please enter the name of a new widget:")
(setf *database* (add-widget *database* (read)))
(format t "The database contains the following: ~a~%" *database*)))
(defparameter *my-list* '(4 7 2 3))
;For demonstration purposes only. A lisper would not write code like this.
(loop for n below (length *my-list*)
do (setf (nth n *my-list*) (+ (nth n *my-list*) 2)))
*my-list*
(defun add-two (list)
(when list
(cons (+ 2 (car list)) (add-two (cdr list)))))
(add-two nil)
;A lisper will use high-order function like this
(mapcar (lambda (x)
(+ x 2))
'(4 7 2 3))