我们发现这个函数生成器可以在P.Graham的“ANSI Common Lisp”(第110页)中实现合成。 参数是n> 0引用的函数名称。我不完全理解它,所以我会在这里引用的代码,并指定我的问题,它的下面:(撰写)在Common Lisp
(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)))))
参数列表组成反转,解压后,其(现第一)元素绑定到“FN1 '和其余的'休息'。 最外层的lambda的主体是一个reduce:(funcall fi(funcall fi-1 ...)),操作数以相反顺序恢复初始值。
1)最外层lambda表达式的作用是什么?也就是说,它从哪里得到它的“参数”呢?它是指定为解构绑定的第一个参数的数据结构吗? 2)最里面的lambda从哪里来的呢?
我的意思是我可以欣赏代码的作用,但词法范围对我来说仍然有点神秘。 期待任何和所有的评论! 在此先感谢, // Marco
为什么所有吊架? – Marcin
我的歉意,我没有看到这个讨论在http://stackoverflow.com/questions/5928106/compose-example-in-paul-grahams-ansi-common-lisp – ocramz
@Marcin,引导眼睛; )这是不好的做法?我仍然是一个noob – ocramz