我們發現這個函數生成器可以在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