我们在 P.Graham 的“ANSI Common Lisp”(第 110 页)中找到了这个函数构建器来实现组合。参数是 n>0 引用的函数名称。我不完全理解它,所以我将在此处引用代码并在其下方指定我的问题:
(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)))))
compose 的参数列表被反转和解包,它的(现在是第一个)元素绑定到“fn1”,其余元素绑定到“rest”。最外层 lambda 的主体是一个 reduce: (funcall fi (funcall fi-1 ... ) ),操作数以相反的顺序恢复初始操作数。
1) 最外层的 lambda 表达式的作用是什么?即,它从哪里得到它的“参数”?是解构绑定的第一个参数指定的数据结构吗?2) 最里面的 lambda 从哪里获取它的两个参数?
我的意思是我可以欣赏代码的作用,但词汇范围对我来说仍然有点神秘。期待任何和所有的评论!提前致谢,//马可