2012-02-02 9 views

उत्तर

30

कॉमन लिस्प में, दोनों flet और labels थोड़ा अलग तरह की शाब्दिक बाइंडिंग बनाने:

  • flet स्थानीय समारोह बंधन के लिए एक विशेष रूप है। बाइंडिंग रिकर्सिव नहीं हैं और एक दूसरे को संदर्भित नहीं कर सकते। प्रत्येक बाध्यकारी में फ़ंक्शन का नाम, तर्क, और फ़ंक्शन बॉडी होता है।

  • labels स्थानीय फ़ंक्शन बाध्यकारी के लिए एक विशेष रूप है। बाइंडिंग रिकर्सिव हो सकती है और एक दूसरे को का संदर्भ दे सकती है। प्रत्येक बाध्यकारी में फ़ंक्शन का नाम, तर्क, और फ़ंक्शन बॉडी होता है।

Emacs Lisp में, एक छोटा अंतर है। लेबल फ़ॉर्म फ़लेट जैसा है, सिवाय इसके कि यह गतिशील बाइंडिंग के बजाय फ़ंक्शन नामों की शब्दावली बाइंडिंग बनाता है।

+12

लेबल पर फ़ैलेट पर एक लाभ यह है कि यदि आप फ़ंक्शन के साथ फ़ंक्शन 'foo' परिभाषित करते हैं, तो यह उस स्कोप में' foo' नामक किसी अन्य फ़ंक्शन को संदर्भित कर सकता है, जबकि लेबल के साथ यह स्वयं ही संदर्भित होगा। –

+6

सवाल आम लिस्प के बारे में स्पष्ट रूप से था, * नहीं * Emacs Lisp। पहले अनुच्छेद को हटाने के लिए अच्छा होगा, क्योंकि यह भ्रम पैदा कर सकता है। कई लिस्प बोलीभाषाएं हैं - यह प्रश्न आम लिस्प के बारे में है। – Drew

संबंधित मुद्दे