2010-04-18 8 views
5

के बीच अंतर सामान्य शब्दों में बाध्यकारी (एलईटी) और प्रतीकों (= चर) को सेट करने के बीच अंतर (सरल शब्दों में) क्या है?आम-लिस्प: बाइंडिंग और प्रतीक

+0

"... और प्रतीकों (= चर)" से आपका क्या मतलब है? क्या आप हमें उन दो अवधारणाओं के लिए अभिव्यक्ति के उदाहरण दे सकते हैं जिन्हें आप वर्णन कर रहे हैं? –

उत्तर

6

प्रतीकों और चर दो अलग-अलग प्रकार की इकाइयां हैं। प्रतीक कुछ का नाम है; परिवर्तनीय एक मान के लिए एक कंटेनर है। परिवर्तनीय एक प्रतीक द्वारा नामित किया जा सकता है।

बाइंडिंग प्रतीक और एक चर के बीच एक संबंध है; जब बाध्यकारी प्रभाव में है, तो आप एक चर को इसके नाम से संदर्भित कर सकते हैं। let फॉर्म ऐसे बाध्यकारी बनाता है।

+0

क्षमा करें अगर मैं पर्याप्त स्पष्ट नहीं था। मैं इस ट्यूटोरियल देख रहा था: http://en.wikibooks.org/wiki/Common_Lisp/First_steps/Beginner_tutorial क्या बीच का अंतर है: (चलो ((क 1))) और (setf एक 1) – martins

+1

(चलो ((1)) ...) एक चर (स्थानीय लेक्सिकल स्कोप के साथ) बनाता है, प्रतीक ए और इस चर के बीच बाध्यकारी ("चलो" के अंदर व्याख्यात्मक संदर्भ में) और इसे 1 तक प्रारंभ करता है। (setf a 1) अलग-अलग व्यवहार कर सकता है: यदि बाध्यकारी ए है, तो यह इसके मान को बदल देता है। यदि कोई बाध्यकारी नहीं है, तो यह वैश्विक बाध्यकारी ए बनाता है और इसे 1 तक प्रारंभ करता है। हालांकि, वैश्विक बाध्यकारी प्रकार को निर्दिष्ट नहीं किया गया है और लिस्प कार्यान्वयन (और उनके संस्करण) के बीच अलग है। तो यदि आपके पास ए नामक एक चर है, तो सेटफ अपना मान बदल देगा; अन्यथा परिणाम पूरी तरह से निर्दिष्ट नहीं है। –

1

(चलो ((ए 1))) उस बिंदु तक 1 तक का मान सेट करता है जहां समापन ब्रैकेट जो चलने से पहले उद्घाटन ब्रैकेट से मेल खाता है, उस बिंदु पर जो भी पिछले मान के रूप में वापस आता है (या अपरिभाषित हो जाता है)। आप अक्सर एक समारोह के शरीर में एक चलो देखते हैं जहां आपको स्थानीय चर की आवश्यकता होती है जिसे फ़ंक्शन के अंत में गुंजाइश से बाहर जाने की आवश्यकता होती है, ताकि आप वहां चलो इस्तेमाल कर सकें।

(setf a 1) एक से 1 सेट करता है और मानता है कि या तो पहले परिभाषित किया गया है (चाहे defparameter, defvariable या let) या यह एक नया विशेष चर है जिसे मूल्य की आवश्यकता है।

यह उससे थोड़ा अधिक जटिल है लेकिन मुझे यकीन नहीं है कि मेरे पास यह समझाने के लिए लिस्प चॉप हैं।