Emacs में setqऔर defvarलिस्प में क्या अंतर है ?
मुझे /programming/3855862 पर समान प्रश्न का सामान्य लिस्प संस्करण दिखाई देता है । क्या वे एलीस्प में समान हैं?
Emacs में setqऔर defvarलिस्प में क्या अंतर है ?
मुझे /programming/3855862 पर समान प्रश्न का सामान्य लिस्प संस्करण दिखाई देता है । क्या वे एलीस्प में समान हैं?
जवाबों:
आपको Emacs से यह प्रश्न पूछना चाहिए : C-h iElisp m ElispManual ( ) चुनें, और "defvar" ( i defvar) के लिए इंडेक्स खोजें । यह आपको परिभाषित चर को नोड करने के लिए ले जाता है ।
Emacs आपको बताता है कि defvarएक डॉक्टर स्ट्रिंग संलग्न करने की अनुमति देता है , और यदि चर पहले से ही एक मूल्य है तो यह कुछ भी नहीं करता है ।
यह आपको defvarअसाइन किए जाने वाले मूल्य के उपयोग के बारे में भी बताता है (defvar foo):। यह आपको बताता है कि चर को गतिशील रूप से स्कोप घोषित किया गया है ।
setq उन गुणों में से कोई भी नहीं है।
defvarऔर setqसमान हैं, लेकिन Emacs लिस्प और कॉमन लिस्प में समान नहीं हैं।
defvarकि एक वैश्विक चर (जैसा कि अनिवार्य प्रोग्रामिंग शैली में) और अनुकूलन के लिए एक सम्मेलन है, जबकि सेटैक कार्यात्मक प्रोग्रामिंग भाषाओं (गतिशील / लेक्सिकल स्कूपिंग नियम के साथ) में एक बंधन के समान है, जिसके आधार पर वैश्विक स्कूपिंग मोड सक्रिय है। .......)
setqएक var मान सेट करता है, भले ही var (घटना) स्थानीय हो। defvarवैर को वैश्विक घोषित करता है। (यह "बफ़र-लोकल" भी हो सकता है local-variable-p:)। एक फंक्शन अर्ग या बायर के रूप में होने वाली एक वार्निंग letसामान्य अर्थ में "लोकल" है। यदि letआदि से बंधा कोई संस्करण वैश्विक है (या बफर-लोकल) तो उसके लिए एक स्थानीय बाइंडिंग (सामान्य अर्थ) बनाया जाता है, उस अवधि / दायरे के लिए let। उस बाध्यकारी दायरे के भीतर, setqस्थानीय मूल्य को बदलता है। एक var घटना स्थानीय होने के बारे में बात करना बेहतर है (स्टैक पर) या वैश्विक (ढेर पर) एक var ऐसा होने से।
M-x report-emacs-bugउन सुधारों का सुझाव देना मददगार हो सकता है जो दूसरों को इसे आसान बनाने में मदद कर सकते हैं।