हम इस फ़ंक्शन बिल्डर को पी। ग्राहम के "एएनएसआई कॉमन लिस्प" (पृष्ठ 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)))))
तर्क सूची रचना करने को उलट दिया और पैक, अपने (अब पहले) तत्व 'fn1 के लिए बाध्य है 'और बाकी' आराम 'करने के लिए। बाहरीतम लैम्ब्डा का शरीर कम हो जाता है: (funcall fi (funcall fi-1 ...)), प्रारंभिक एक को पुनर्स्थापित करने के लिए उलटा क्रम में संचालन के साथ।
1) बाहरीतम लैम्ब्डा अभिव्यक्ति की भूमिका क्या है? अर्थात्, इसे 'तर्क' कहां से मिलता है? क्या यह डेटा संरचना को विनाशकारी-बांध के पहले तर्क के रूप में निर्दिष्ट किया गया है? 2) आंतरिकतम लैम्ब्डा अपने दो तर्क कहां से लेता है?
मेरा मतलब है कि मैं कोड की सराहना कर सकता हूं लेकिन अभी भी लेक्सिकल गुंजाइश मेरे लिए एक रहस्य है। किसी भी और सभी टिप्पणियों के लिए तत्पर हैं! अग्रिम धन्यवाद, // मार्को
क्यों फांसी कोष्ठक के सभी हो सकता है? – Marcin
मेरी माफ़ी, मैंने इस पर चर्चा नहीं देखी http://stackoverflow.com/questions/5928106/compose-example-in-paul-grahams-ansi-common-lisp – ocramz
@ मार्सिन, आंखों का मार्गदर्शन करने के लिए;) क्या यह बुरा अभ्यास है? मैं अभी भी एक नोब – ocramz