जब Emacs#फ़ंक्शन सिंटैक्स का उपयोग किया जाना चाहिए?




lisp elisp (2)

एलिस्ट #' है (प्रभाव में) विशुद्ध रूप से बाइट-संकलन के बारे में ( संपादित करें: और बाद में एमएसीएएस 24, भी शाब्दिक बंद ); लेकिन आपको शायद इसके उपयोग की भी आवश्यकता नहीं होगी।

#'... थोड़े हाथ के लिए है (function ...) जो '... / (quote ...) का एक प्रकार है जो कि बाइट-कंपाइलर को भी संकेत देता है कि वह उद्धृत फ़ॉर्म को संकलित कर सकता है समारोह।

हालांकि, आधुनिक एमएसीएस (आईआईआरसी में यह हमेशा मामला नहीं था), (lambda ...) #'(lambda ...) बराबर है, इसलिए मेरा मानना ​​है कि आप शायद ही कभी (यदि कभी) को #' लिखने की आवश्यकता होगी #'

आप भी शायद ही कभी '(lambda ...) का उपयोग करना चाहते हैं, क्योंकि स्टीफन ने विस्तार से बताया है (लेकिन 'symbol ठीक है)।

यह मैन्युअल में (elisp) Anonymous Functions आरईटी के तहत कवर किया गया है (यद्यपि उदाहरण कोड के अंतिम भाग में कोई त्रुटि प्रतीत होती है, क्योंकि यह पिछले उदाहरण के समान है (इमाक्स 24.3.1 में))।

(एनबी स्टीफन का जवाब निश्चित है, लेकिन मैं इसे यहाँ रखूँगा क्योंकि उम्मीद है कि इसे पूरक होगा।)

असल में, मैं एमैक्स लिस्प की function प्रक्रिया का उपयोग कब करना चाहिए? मुझे कोई ऐसे उदाहरण नहीं मिले हैं जिसमें व्यवहार में कोई फर्क नहीं पड़ता है यदि आप फ़ंक्शन के तर्कों 'like-this या #'like-this वास्तव में, अगर मैं मूल्यांकन करता हूँ (eq 'goto-char #'goto-char) यह रिटर्न देता t

एमैक्स लिस्प कोड जिसे मैंने देखा है शायद ही कभी function का उपयोग करता function / #' ; लेखकों बस quote / ' सब कुछ
उदाहरण: (add-hook 'emacs-lisp-hook 'turn-on-eldoc-mode)

हालांकि, मैं कुछ गिनती के नमूने मिल सकता है। इमैक 24.3 के electric.el के स्रोत कोड से यह एक है:

(add-hook 'post-self-insert-hook
          #'electric-indent-post-self-insert-function
          'append)

अनुमान और आगे प्रश्न:

  • क्या यह सिर्फ एक लिस्प-2 शैलीगत सम्मेलन है?
  • क्या यह बाइट-संकलन के साथ करना है?
  • क्या यह पुस्तकालय लेखकों के लिए ही बात करता है? जैसे, यदि आप चाहते हैं कि आपका कोड बहुत बड़ा वातावरण और एएमएसीएस संस्करणों के तहत चलाया जाए? (यदि आप बस "डॉटफ़ाइल-टिंकरिंग" हो तो परिणाम होगा यदि आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।)
  • मुझे लैम्ब्डा-अभिव्यक्ति कहां चाहिए? जब मैं उन्हें छोड़ नहीं सकता
    उदाहरण, (do-something '(lambda …
    बनाम (do-something (lambda …
  • क्या ईएमएसीएस के एक पुराने संस्करण में कुछ सीमाएं थीं जो एलिसपी के इन पहलुओं को जन्म देती हैं? जैसे, क्या मैं ज्यादातर ' और #' बीच के अंतर को तब तक अनदेखा कर सकता हूं जब तक कि मैं एक्स की तुलना में एमएसीएक्स के संस्करण का उपयोग कर रहा हूं?

function (उर्फ #' ) का उपयोग कार्यों को उद्धृत करने के लिए किया जाता है, जबकि quote (उर्फ ' ) का उपयोग डेटा उद्धृत करने के लिए किया जाता है। अब, एमएक्स-लिस्प में एक प्रतीक जिसका फ़ंक्शन सेल फ़ंक्शन होता है, वह फ़ंक्शन होता है, इसलिए #'symbol केवल वही 'symbol प्रथा में होता है (यद्यपि इरादा अलग होता है, पहले यह स्पष्ट करता है कि कोई सिर्फ बात नहीं कर रहा है प्रतीक "प्रतीक" के बारे में, लेकिन "प्रतीक" नामक फ़ंक्शन के बारे में)

वह स्थान जहां अंतर केवल लैंगिकता का नहीं है, जब वह लम्ब्दास का हवाला देते हैं: '(lambda ...) एक ऐसी अभिव्यक्ति है जो एक सूची का मूल्यांकन करता है जिसका पहला तत्व प्रतीक lambda । आपको car और cdr जैसी चीजों को लागू करने की अनुमति है, लेकिन आपको इसे कॉल नहीं करना चाहिए जैसा कि यह एक फ़ंक्शन था (हालांकि व्यवहार में यह सिर्फ ठीक काम करता है)। इसके विपरीत #'(lambda ...) (जो लिखा जा सकता है (lambda ...) ) एक अभिव्यक्ति है जो किसी फ़ंक्शन के मूल्यांकन करता है । इसका अर्थ है कि आप इसे car पर लागू नहीं कर सकते हैं, लेकिन बाइट-कंपाइलर #'(lambda ...) अंदर देख सकते हैं, इसमें मैक्रो विस्तार कर सकते हैं, आपको चेतावनी देते हैं कि क्या मिलेगा, कोषेर नहीं दिखता है आदि। ।; लिनक्स-बाध्यकारी के लिए इसे मुक्त चर को खोजने के लिए अंदर भी देखना पड़ता है, जिसमें उस फ़ंक्शन को संदर्भ मिलता है।







elisp