2008-09-25 9 views
89

इसे एक प्रारंभिक लिस्प पुस्तक के प्रमुख हिस्सों के माध्यम से बनाने के बाद, मैं अभी भी समझ नहीं पाया कि विशेष ऑपरेटर (quote) (या समकक्ष ') फ़ंक्शन करता है, फिर भी यह मैंने देखा है कि यह पूरे लिस्प कोड पर है।लिस्प में '(या उद्धरण) का उपयोग कब करें?

यह क्या करता है?

उत्तर

148

बाईपास डिफ़ॉल्ट मूल्यांकन नियमों लघु जवाब और नहीं अभिव्यक्ति (प्रतीक या एस exp) का मूल्यांकन, समारोह बिल्कुल के रूप में लिखे गए साथ इसे पारित करना।

लांग उत्तर: डिफ़ॉल्ट मूल्यांकन नियम

एक नियमित रूप से समारोह (मुझे लगता है कि बाद में करने के लिए आया हूँ) है, शुरू हो जाती है इसे करने के लिए पारित कर दिया सभी तर्कों मूल्यांकन किया जाता है।इसका मतलब है आप यह लिख सकते हैं:

(* (+ a 2) 
    3) 

बदले में कौन सा (+ a 2) मूल्यांकन करता है, a और 2. प्रतीक a का मूल्य मूल्यांकन द्वारा वर्तमान चर बाध्यकारी सेट में देखा है, और फिर बदल दिया। कहो a वर्तमान में मान 3 के लिए बाध्य है:

(let ((a 3)) 
    (* (+ a 2) 
    3)) 

हम (+ 3 2) प्राप्त करना चाहते हैं, तो + 3 और 2 उपज 5. हमारा मूल रूप पर शुरू हो जाती है अब (* 5 3) उपज 15.

के बारे में बताएं quote है पहले से!

ठीक है। जैसा कि ऊपर देखा गया है, किसी फ़ंक्शन के सभी तर्कों का मूल्यांकन किया जाता है, इसलिए यदि आप प्रतीकa पास करना चाहते हैं और इसका मूल्य नहीं है, तो आप इसका मूल्यांकन नहीं करना चाहते हैं। लिस्प प्रतीक दोनों उनके मूल्यों के रूप में दोगुना हो सकते हैं, और मार्कर जहां आप अन्य भाषाओं में स्ट्रिंग्स का इस्तेमाल करते हैं, जैसे हैंश टेबल के लिए चाबियाँ।

यह वह जगह है जहां quote आता है। कहें कि आप पाइथन एप्लिकेशन से संसाधन आवंटन प्लॉट करना चाहते हैं, बल्कि लिस्प में साजिश करना चाहते हैं। आप देते उत्पादन इस (थोड़ा prettyfied) की तरह लग रही

print "'(" 
while allocating: 
    if random.random() > 0.5: 
     print "(allocate %d)" random.randint(0, 20) 
    else: 
     print "(free %d)" % random.randint(0, 20) 
    ... 
print ")" 

:

'((allocate 3) 
    (allocate 7) 
    (free 14) 
    (allocate 19) 
    ...) 

याद रखें कि मैं क्या कहा quote के बारे में ("टिक") डिफ़ॉल्ट नियम के कारण नहीं अपने अजगर एप्लिकेशन है कुछ इस तरह करते हैं लागू करने के लिए? अच्छा। अन्यथा क्या होगा कि allocate और free के मान देखे गए हैं, और हम इसे नहीं चाहते हैं। हमारे लिस्प में, हम करना चाहते हैं:

(dolist (entry allocation-log) 
    (case (first entry) 
    (allocate (plot-allocation (second entry))) 
    (free (plot-free (second entry))))) 

ऊपर दिए गए डेटा के लिए, फ़ंक्शन कॉल की निम्न क्रम होगा किए गए हैं:

(plot-allocation 3) 
(plot-allocation 7) 
(plot-free 14) 
(plot-allocation 19) 

लेकिन क्या list के बारे में?

अच्छा, कभी-कभी आप तर्कों का मूल्यांकन करना चाहते हैं। मान लें कि आपके पास एक निफ्टी फ़ंक्शन है जो एक संख्या और स्ट्रिंग में हेरफेर कर रहा है और परिणामस्वरूप ... चीजों की एक सूची लौटा रहा है। आइए एक झूठी शुरुआत करें:

(defun mess-with (number string) 
    '(value-of-number (1+ number) something-with-string (length string))) 

Lisp> (mess-with 20 "foo") 
(VALUE-OF-NUMBER (1+ NUMBER) SOMETHING-WITH-STRING (LENGTH STRING)) 

हे! यही वह नहीं है जिसे हम चाहते थे। हम चुनिंदा कुछ तर्कों का मूल्यांकन करना चाहते हैं, और दूसरों को प्रतीकों के रूप में छोड़ना चाहते हैं। # 2 आज़माएं!

(defun mess-with (number string) 
    (list 'value-of-number (1+ number) 'something-with-string (length string))) 

Lisp> (mess-with 20 "foo") 
(VALUE-OF-NUMBER 21 SOMETHING-WITH-STRING 3) 

नॉट जस्ट quote, लेकिन backquote

बहुत बेहतर! संयोग से, यह पैटर्न (ज्यादातर) मैक्रोज़ में इतना आम है, कि ऐसा करने के लिए विशेष वाक्यविन्यास है।backquote:

(defun mess-with (number string) 
    `(value-of-number ,(1+ number) something-with-string ,(length string))) 

यह quote का उपयोग कर की तरह है, लेकिन विकल्प के साथ स्पष्ट रूप से उन्हें अल्पविराम के साथ लगाकर द्वारा कुछ तर्कों का मूल्यांकन करने के। नतीजा list का उपयोग करने के बराबर है, लेकिन यदि आप मैक्रो से कोड उत्पन्न कर रहे हैं तो आप अक्सर कोड के छोटे हिस्सों का मूल्यांकन करना चाहते हैं, इसलिए बैकक्वॉट अधिक उपयुक्त है। छोटी सूचियों के लिए, list अधिक पठनीय हो सकता है।

अरे, आप quote भूल गए हैं!

तो, यह हमें कहां छोड़ देता है? ओह ठीक है, quote वास्तव में क्या करता है? यह बस अपने तर्क (ओं) unevaluated देता है! याद रखें कि मैंने नियमित कार्यों के बारे में शुरुआत में क्या कहा था? यह पता चला है कि कुछ ऑपरेटरों/कार्यों को उनके तर्कों का मूल्यांकन करने की आवश्यकता नहीं है। जैसे कि अगर - यदि आप नहीं लिया गया था, तो आप नहीं चाहते कि अन्य शाखा का मूल्यांकन किया जाए, है ना? तथाकथित विशेष ऑपरेटरों, मैक्रोज़ के साथ, इस तरह काम करते हैं। विशेष ऑपरेटर भी भाषा का "सिद्धांत" हैं - नियमों का न्यूनतम सेट - जिस पर आप अलग-अलग तरीकों से एक साथ संयोजन करके बाकी लिस्प को कार्यान्वित कर सकते हैं।

वापस quote है, हालांकि:

Lisp> (quote spiffy-symbol) 
SPIFFY-SYMBOL 

Lisp> 'spiffy-symbol ; ' is just a shorthand ("reader macro"), as shown above 
SPIFFY-SYMBOL 

की तुलना करने के लिए (पर स्टील-बैंक कॉमन लिस्प):

Lisp> spiffy-symbol 
debugger invoked on a UNBOUND-VARIABLE in thread #<THREAD "initial thread" RUNNING {A69F6A9}>: 
    The variable SPIFFY-SYMBOL is unbound. 

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. 

restarts (invokable by number or by possibly-abbreviated name): 
    0: [ABORT] Exit debugger, returning to top level. 

(SB-INT:SIMPLE-EVAL-IN-LEXENV SPIFFY-SYMBOL #<NULL-LEXENV>) 
0] 

क्योंकि वहाँ है वर्तमान क्षेत्र में कोई spiffy-symbol!

quote, backquote (अल्पविराम के साथ), और list संक्षेप ऊपर उपकरण के कुछ आप सूचियों, कि मूल्यों का केवल सूचियों नहीं हैं बनाने के लिए उपयोग कर रहे हैं, लेकिन जैसा कि आप देखा हल्के के रूप में इस्तेमाल किया जा सकता (struct परिभाषित करने की कोई आवश्यकता नहीं है) डेटा संरचनाएं!

यदि आप और जानना चाहते हैं, तो मैं लिस्प सीखने के व्यावहारिक दृष्टिकोण के लिए पीटर सेबेल की पुस्तक Practical Common Lisp की सलाह देता हूं, यदि आप पहले से ही प्रोग्रामिंग में हैं। आखिरकार आपकी लिस्प यात्रा पर, आप संकुल का उपयोग शुरू कर देंगे। रॉन गारेट का The Idiot's Guide to Common Lisp Packages आपको उन लोगों की अच्छी व्याख्या देगा।

हैप्पी हैकिंग!

48

यह कहता है "मुझे मूल्यांकन न करें"। उदाहरण के लिए, यदि आप डेटा के रूप में एक सूची का उपयोग करना चाहते हैं, और कोड के रूप में नहीं, तो आप इसके सामने एक उद्धरण डाल देंगे। उदाहरण के लिए,

(print '(+ 3 4)) प्रिंट "(+ 3 4)", जबकि (print (+ 3 4)) प्रिंट "7"

+0

इसका मूल्यांकन कैसे किया जा सकता है उदाहरण के लिए वहां 'unquote' कमांड है? – William

+1

@ विलियम लिप्स के पास 'eval':' (प्रिंट (eval '(+ 3 4)) नामक एक सुविधाजनक कार्य है। लिस्प्स को इतना बढ़िया बनाता है: सूचियां कोड हैं, और कोड सूचियां हैं, इसलिए एक लिस्प प्रोग्राम स्वयं को कुशल बना सकता है। – darkfeline

9

बोली एक रूप के निष्पादन या मूल्यांकन को रोकता है, डेटा में बजाय इसे मोड़। आम तौर पर आप इसे तब से निष्पादित करके डेटा निष्पादित कर सकते हैं।

बोली उदाहरण के लिए, सूची डेटा संरचनाओं बनाता है, निम्नलिखित के बराबर हैं:

(quote (1 2 3)) 
'(1 2 3) 

आप शायद सबसे अच्छा कर रहे हैं:

(quote a) 
'a 

यह भी सूची (या पेड़ों) बनाने के लिए इस्तेमाल किया जा सकता लिस्प पर एक प्रारंभिक पुस्तक प्राप्त करने के लिए, जैसे कि Practical Common Lisp (जो ऑनलाइन पढ़ने के लिए उपलब्ध है)।

11

इस प्रश्न का एक उत्तर कहता है कि QUOTE "सूची डेटा संरचनाएं बनाता है"। यह बिल्कुल सही नहीं है। QUOTE इससे अधिक मौलिक है। वास्तव में, QUOTE एक मामूली ऑपरेटर है: इसका उद्देश्य को कुछ भी होने से रोकना है। विशेष रूप से, यह कुछ भी नहीं बनाता है।

क्या (QUOTE एक्स) कहता है मूल रूप से "कुछ भी मत करो, बस मुझे एक्स दें।" एक्स को (QUOTE (ए बी सी)) या एक प्रतीक (QUOTE FOO) के रूप में एक सूची की आवश्यकता नहीं है। यह किसी भी वस्तु हो सकता है। दरअसल, सूची द्वारा मूल्यांकन की जाने वाली सूची का मूल्यांकन (सूची 'कुछ-उद्देश्य प्राप्त करें) हमेशा कुछ भी-ऑब्जेक्ट लौटाएगा, जो भी हो।

अब, कारण यह है कि (QUOTE (ए बी सी)) ऐसा लगता है कि यह एक सूची बनाई गई है जिसका तत्व ए, बी, और सी है, इस तरह की एक सूची वास्तव में वह लौटती है; लेकिन उस समय QUOTE फॉर्म का मूल्यांकन किया जाता है, सूची आम तौर पर थोड़ी देर के लिए अस्तित्व में रही है (QUOTE फ़ॉर्म के घटक के रूप में!), जिसे लोडर या पाठक द्वारा कोड के निष्पादन से पहले बनाया गया है।

इसका एक निहितार्थ जो अक्सर नए लोगों को यात्रा करने के लिए जाता है यह है कि QUOTE फ़ॉर्म द्वारा लौटाई गई सूची को संशोधित करना बहुत मूर्खतापूर्ण है। QUOTE द्वारा लौटाया गया डेटा सभी उद्देश्यों और उद्देश्यों के लिए कोड निष्पादित किया जा रहा है और इसलिए इसे केवल पढ़ने के लिए माना जाना चाहिए!

13

अन्य लोगों ने इस सवाल का जवाब दिया है, और मैथियस बेनकार्ड एक उत्कृष्ट चेतावनी लाता है।

सूची बनाने के लिए उद्धरण का उपयोग न करें जो आप कम कर देंगे। Spec संकलक को उद्धृत सूची के रूप में उद्धृत सूचियों का इलाज करने की अनुमति देता है। अक्सर, एक कंपाइलर स्मृति में उनके लिए एक एकल मूल्य बनाकर स्थिरांक को अनुकूलित करेगा और उसके बाद उन सभी स्थानों से उस एकल मान को संदर्भित करेगा जहां निरंतर दिखाई देता है। दूसरे शब्दों में, यह लगातार एक अज्ञात वैश्विक चर की तरह व्यवहार कर सकता है।

इससे स्पष्ट समस्याएं पैदा हो सकती हैं। यदि आप निरंतर संशोधित करते हैं, तो यह पूरी तरह से असंबंधित कोड में समान स्थिरता के अन्य उपयोगों को बहुत अच्छी तरह से संशोधित कर सकता है। उदाहरण के लिए, आप कुछ चर में '(1 1) से कुछ चर की तुलना कर सकते हैं, और एक पूरी तरह से अलग फ़ंक्शन में,' (1 1) के साथ एक सूची शुरू करें और फिर इसमें और सामान जोड़ें। इन कार्यों को चलाने पर, आप पाएंगे कि पहला फ़ंक्शन अब ठीक से मेल नहीं खाता है, क्योंकि अब यह चर ('1 1 2 3 5 8 13) से तुलना करने की कोशिश कर रहा है, जो दूसरा फ़ंक्शन लौटाया गया है।ये दो कार्य पूरी तरह से असंबंधित हैं, लेकिन स्थिरांक के उपयोग के कारण उनका एक दूसरे पर प्रभाव पड़ता है। यहां तक ​​कि पागल बुरे प्रभाव भी हो सकते हैं, एक पूरी तरह से सामान्य सूची पुनरावृत्ति अचानक अनंत लूपिंग की तरह हो सकता है।

जब आप निरंतर सूची की आवश्यकता होती है, तो तुलना के लिए उद्धरण का उपयोग करें। जब आप परिणाम संशोधित करेंगे तो सूची का उपयोग करें।

+0

तो ऐसा लगता है कि आपको 'अधिकांश (सूची (+ 1 2))' का उपयोग करना चाहिए। यदि ऐसा है तो आप इस तरह के उदाहरण के अंदर '(+ 1 2) 'के मूल्यांकन को कैसे रोकते हैं? क्या कोई 'unquote' कमांड है? – William

+0

क्या आप ''((3))' के बराबर चाहते हैं, या '' ((+ 1 2)) के बराबर '? यदि उत्तरार्द्ध, आपको अधिक 'सूची' का उपयोग करना होगा: '(सूची (सूची' + 1 2)) '। या यदि आप '(+ 1 2) 'के बराबर चाहते थे, तो बस' (सूची '+ 1 2)'। और याद रखें, यदि आप सूची को संशोधित नहीं कर रहे हैं, तो उद्धरण का उपयोग करने में संकोच न करें: '' (+ 1 2) 'के साथ कुछ भी गलत नहीं है अगर आप इसके खिलाफ या कुछ की तुलना कर रहे हैं। – Xanthir

+0

क्या आप इस बात का जिक्र करते हैं कि उद्धृत सूचियों को स्थिरांक के रूप में माना जाना चाहिए? – William

2

जब हम तर्क के मूल्य को पारित करने के बजाय स्वयं एक तर्क पारित करना चाहते हैं तो हम उद्धरण का उपयोग करते हैं। यह ज्यादातर सूचियों, जोड़ों और परमाणुओं के उपयोग से गुज़रने वाली प्रक्रिया से संबंधित है जो सी प्रोग्रामिंग भाषा में उपलब्ध नहीं हैं (अधिकांश लोग सी प्रोग्रामिंग का उपयोग कर प्रोग्रामिंग शुरू करते हैं, इसलिए हम उलझन में हैं) यह योजना प्रोग्रामिंग भाषा में कोड है जो एक बोली है लिस्प का और मुझे लगता है कि आप इस कोड को समझ सकते हैं।

(define atom?    ; defining a procedure atom? 
    (lambda (x)    ; which as one argument x 
(and (not (null? x)) (not(pair? x))))) ; checks if the argument is atom or not 
(atom? '(a b c)) ; since it is a list it is false #f 

आखिरी पंक्ति (परमाणु? 'एबीसी) यदि एबीसी एक परमाणु है या नहीं की जाँच करने के प्रक्रिया के लिए एबीसी गुजर रहा है के रूप में यह है, लेकिन जब आप पारित (परमाणु? एबीसी) तो यह मूल्य के लिए जाँच करता है एबीसी और पासस के लिए मूल्य। चूंकि, हमने

0

उद्धरण के लिए कोई भी मूल्य प्रदान नहीं किया है उद्धरण अपने तर्कों का आंतरिक प्रतिनिधित्व देता है। क्या नहीं करता है, इस तरह के बहुत से स्पष्टीकरण के माध्यम से बहने के बाद, जब प्रकाश-बल्ब चल रहा था। अगर आरईपीएल ने मुझे नाम उद्धृत करते हुए यूपीपीआर-केस में फ़ंक्शन नामों को परिवर्तित नहीं किया है, तो शायद यह मेरे सामने नहीं आया होगा।

तो। सामान्य लिस्प फ़ंक्शन उनके तर्कों को आंतरिक प्रतिनिधित्व में परिवर्तित करते हैं, तर्कों का मूल्यांकन करते हैं, और फ़ंक्शन को लागू करते हैं। उद्धरण अपने तर्कों को एक आंतरिक प्रतिनिधित्व में परिवर्तित करता है, और बस इसे वापस देता है। तकनीकी रूप से यह कहना सही है कि उद्धरण कहता है, "मूल्यांकन न करें", लेकिन जब मैं यह समझने की कोशिश कर रहा था कि उसने क्या किया है, तो मुझे बताएं कि यह क्या नहीं करता है निराशाजनक था। मेरा टोस्टर लिस्प कार्यों का मूल्यांकन नहीं करता है; लेकिन यह नहीं है कि आप कैसे समझते हैं कि टोस्टर क्या करता है।

0

anoter संक्षिप्त उत्तर:

quote यह मूल्यांकन करने के बिना मतलब है, और backquote उद्धरण है लेकिन वापस दरवाजे छोड़ दें।

एक अच्छा संदर्भ:

Emacs लिस्प संदर्भ मैनुअल यह बहुत स्पष्ट

9.3 का हवाला देते हुए

विशेष रूप उद्धरण अपने एकल तर्क देता है, लिखित रूप में बनाने के लिए, यह मूल्यांकन करने के बिना। यह एक कार्यक्रम में लगातार प्रतीकों और सूचियों को शामिल करने का एक तरीका प्रदान करता है, जो स्व-मूल्यांकन वस्तुओं नहीं हैं। (यह इस तरह की संख्या, स्ट्रिंग्स और वैक्टर के रूप में स्वयं का मूल्यांकन वस्तुओं उद्धृत करने के लिए आवश्यक नहीं है।)

विशेष प्रपत्र: उद्धरण आपत्ति

This special form returns object, without evaluating it. 

क्योंकि बोली कार्यक्रमों में इतनी बार प्रयोग किया जाता है, लिस्प एक सुविधाजनक प्रदान करता है इसके लिए वाक्यविन्यास पढ़ें। लिस्प ऑब्जेक्ट (रीड सिंटैक्स में) के बाद एक एस्ट्रोफ़े चरित्र ('' ') उस सूची में फैला होता है जिसका पहला तत्व उद्धरण है, और जिसका दूसरा तत्व ऑब्जेक्ट है। इस प्रकार, पढ़ा गया वाक्यविन्यास 'x एक संक्षिप्त नाम है (उद्धरण x)।

(quote (+ 1 2)) 
    ⇒ (+ 1 2) 

(quote foo) 
    ⇒ foo 

'foo 
    ⇒ foo 

''foo 
    ⇒ (quote foo) 

'(quote foo) 
    ⇒ (quote foo) 

9,4 Backquote

Backquote निर्माणों आप एक सूची बोली, लेकिन चुनिंदा उस सूची के तत्वों का मूल्यांकन करने के लिए अनुमति देते हैं:

यहाँ कि उद्धरण का उपयोग भाव के कुछ उदाहरण हैं। सबसे सरल मामले में, यह विशेष रूप उद्धरण के समान है (पिछले खंड में वर्णित; उद्धरण देखें)।

`(a list of (+ 2 3) elements) 
    ⇒ (a list of (+ 2 3) elements) 

'(a list of (+ 2 3) elements) 
    ⇒ (a list of (+ 2 3) elements) 

विशेष मार्कर ',' backquote को तर्क के अंदर है कि स्थिर नहीं है एक मूल्य इंगित करता है: उदाहरण के लिए, इन दो रूपों समान परिणाम। Emacs लिस्प मूल्यांकनकर्ता ',' के तर्क का मूल्यांकन करता है, और सूची संरचना में मूल्य कहते हैं: के साथ

`(a list of ,(+ 2 3) elements) 
    ⇒ (a list of 5 elements) 

प्रतिस्थापन ',' सूची संरचना भी की गहरी स्तरों पर अनुमति दी है। उदाहरण के लिए:

`(1 2 (3 ,(+ 4 5))) 
    ⇒ (1 2 (3 9)) 

तुम भी जिसके परिणामस्वरूप सूची में एक का मूल्यांकन मूल्य ब्याह कर सकते हैं, विशेष मार्कर का उपयोग ', @'। विभाजित सूची के तत्व परिणामस्वरूप सूची के अन्य तत्वों के समान स्तर पर तत्व बन जाते हैं। '`' का उपयोग किए बिना समकक्ष कोड अक्सर पढ़ने योग्य नहीं होता है।

(setq some-list '(2 3)) 
    ⇒ (2 3) 

(cons 1 (append some-list '(4) some-list)) 
    ⇒ (1 2 3 4 2 3) 

`(1 ,@some-list 4 ,@some-list) 
    ⇒ (1 2 3 4 2 3) 
1

Emacs लिस्प में:

क्या उद्धृत किया जा सकता है कुछ उदाहरण हैं?

सूचियां और प्रतीकों।

संख्या का उद्धरण संख्या को स्वयं मूल्यांकन करता है: '55 जैसा ही है।

जब आप सूचियों को उद्धृत करते हैं तो क्या होता है?

उदाहरण के लिए:

'(one two)

(list 'one 'two) जो

(list (intern "one") (intern ("two"))) का मूल्यांकन करने के लिए मूल्यांकन करता है।

(intern "one") "एक" और एक "केंद्रीय" हैश-नक्शे पर यह स्टोर नाम के एक प्रतीक बनाता है, इसलिए किसी भी समय आप कहते हैं 'one तो प्रतीक "one" नामित कि केंद्रीय हैश नक्शे में देखा जाएगा।

लेकिन प्रतीक क्या है?

उदाहरण के लिए

, OO-भाषाओं (जावा/Javascript/अजगर) में एक प्रतीक एक वस्तु एक name क्षेत्र है, जो ऊपर "one" की तरह प्रतीक का नाम है है के रूप में प्रतिनिधित्व किया जा सकता है, और डेटा और/या कोड हो सकता है इस वस्तु से जुड़े हुए हैं।के रूप में

तो अजगर में एक प्रतीक लागू किया जा सकता:

class Symbol: 
    def __init__(self,name,code,value): 
     self.name=name 
     self.code=code 
     self.value=value 

Emacs लिस्प में उदाहरण के लिए एक प्रतीक 1) डेटा एक ही समय में इसके साथ जुड़े और (हो सकता है - एक ही प्रतीक के लिए) 2) इसके साथ जुड़े कोड - संदर्भ के आधार पर, या तो डेटा या कोड कहा जाता है।

उदाहरण के लिए, elisp में:

(progn 
    (fset 'add '+) 
    (set 'add 2) 
    (add add add) 
) 

4 मूल्यांकन करता है।

(add add add) का मूल्यांकन करता है क्योंकि के रूप में:

(add add add) 
(+ add add) 
(+ 2 add) 
(+ 2 2) 
4 

तो, उदाहरण के लिए, Symbol वर्ग हम ऊपर अजगर में परिभाषित का उपयोग कर, इस add elisp-प्रतीक अजगर में Symbol("add",(lambda x,y: x+y),2) रूप में लिखा जा सकता है।

आईआरसी #emacs पर लोगों के लिए प्रतीकों और उद्धरणों को समझाते हुए लोगों के लिए बहुत धन्यवाद।