(define (add n) (lambda (m) (+ n m)))
(define add4 (add 4))
(map (add 7) (list 1 2 3))
लेकिन यह सिर्फ एक छोटा यादृच्छिक उदाहरण है। यदि आप काफी दूर खुदाई करते हैं, तो आपको कई अतिरिक्त कारण मिलेंगे। अधिक व्यापक चर्चा के लिए, आपको वास्तव में कुछ पाठ्यपुस्तकों के माध्यम से जाना चाहिए। इसके लिए मेरी सिफारिश PLAI होगी।
यहाँ एक और प्रदर्शन है:
(define tax 0.17)
(define (add-tax amt) (+ amt (* amt tax)))
यह add-tax
की तरह दिखता है एक समारोह है कि सही कर की दर के साथ निश्चित राशि जोड़ा रिटर्न है - लेकिन आप इस मामले जा रहा है पर भरोसा नहीं कर सकते। उदाहरण के लिए, इसे इस तरह कहा जा सकता है:
(let ((tax -0.17)) (add-tax 100))
और आपको पूरी तरह गलत जवाब मिलेंगे। लेकिन चीजें और भी बदतर हैं यदि आपकी भाषा वास्तव में गतिशील रूप से स्कॉप्ड है: आप पर किसी भी बाध्यकारी पर भरोसा नहीं कर सकते हैं। इस पर विचार करें:
(let ((+ -)) (add-tax 100))
और btw elisp और सीएल तो सीधे एक डबल नाम स्थान जैसी चीजों का उपयोग कर इस समस्या से ग्रस्त नहीं है, है, और पीछा के बारे में नियम बाइंडिंग "में बनाया"।
स्रोत
2010-08-26 18:27:41
डायनामिक रूप से रिबंडिंग फ़ंक्शंस ज्यादातर सीएल में नहीं किए जाते हैं, क्योंकि सीएल डिफ़ॉल्ट रूप से कार्यों के लिए लेक्सिकल बाध्यकारी का उपयोग करता है। एलिसप से अलग, जिसमें कोई भी झुकाव बाध्यकारी नहीं है। –