Bu işlev oluşturucuyu, P.Graham'ın "ANSI Common Lisp" (sayfa 110) bölümünde gerçekleştirmesi için buluyoruz. Argümanlar n> 0 alıntılanan fonksiyon isimleridir. Tamamen bunu anlamıyorum, bu yüzden bunun altında sorularımı kodu buraya alıntı ve belirtirsiniz:(derleme)
(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)))))
oluşturmak için argüman listesi ters ve (şimdi ilk) eleman fn1' bağlı, ambalajsız edilir 've geri kalan' dinlenmek '. En dıştaki lambda'nın gövdesi, bir azaltmadır: (funcall fi (funcall fi-1 ...)), ilkini geri yüklemek için ters sırayla işlenenler.
1) En dıştaki lambda ifadesinin rolü nedir? Yani, 'args' nereden geliyor? Yıkım-bağlama ilk argümanı olarak belirtilen veri yapısı mı? 2) En içteki lambda iki argümanı nereden alır?
Kodun ne yaptığını anlayabiliyorum ama yine de sözcük kapsamı benim için bir gizem. Her türlü ve tüm yorumları sabırsızlıkla bekliyoruz! peşin sayesinde // Marco
olabilir? – Marcin
Özür dilerim, bu konuyu http://stackoverflow.com/questions/5928106/compose-example-in-paul-grahams-ansi-common-lisp – ocramz
@Marcin adresinde görmedim;) Kötü bir uygulama mı? Hala bir noob değilim – ocramz