任何人都可以解释 Paul Graham 的 ANSI Common Lisp 第 110 页中的示例吗?
该示例试图解释使用 &rest 和 lambda 创建函数式编程工具。其中之一是组成函数参数的函数。我找不到任何解释它是如何工作的。代码如下:
(defun compose (&rest fns)
(destructuring-bind (fn1 . rest) (reverse fns)
#'(lambda (&rest args)
(reduce #'(lambda (v f) (funcall f v))
rest
:initial-value (apply fn1 args)))))
用法是:
(mapcar (compose #'list #'round #'sqrt)
'(4 9 16 25))
输出是:
((2) (3) (4) (5))
第 2 行和第 6 行对我来说特别神奇。