
mapcar 和 filter 都是clisp中的高阶函数。lisp的函数可以以其他函数作为参数或者返回值,是程序抽象的重要工具。
CL-USER 1 > (mapcar #'1+ '(1 2 3 4))
(2 3 4 5)
CL-USER 2 > (defun double(x)(* x 2))
DOUBLE
CL-USER 3 > (mapcar #'double '(1 2 3 4))
(2 4 6 8)
filter 的例子:
(defun filter (list-of-elements test)
(cond ((null list-of-elements) nil)
((funcall test (car list-of-elements))
(cons (car list-of-elements)(filter (cdr list-of-elements) test)))
(t (filter (cdr list-of-elements) test))))
FILTER
(filter '(1 3 5 4 10) #'evenp)
(4 10)