2009-11-02 14 views
22

में चर का मूल्यांकन करें यह शायद मूर्खतापूर्ण है लेकिन मेरे पास उद्धरण और मूल्यांकन के संबंध में क्या हो रहा है यह समझने के लिए पर्याप्त एलिसप ज्ञान नहीं है।Emacs Lisp: alist

मान लीजिए मैं इस elisp कोड है:

(add-to-list 'default-frame-alist '(width . 100)) 
(add-to-list 'default-frame-alist '(height . 50)) 

यह उम्मीद डिफ़ॉल्ट फ्रेम-alist मूल्य में परिणाम होगा:

((height 50) 
(width 100)) 

लेकिन अब अगर मैं इस है:

(setq my-frame-width 100) 
(setq my-frame-height 50) 
(add-to-list 'default-frame-alist '(width . my-frame-width)) 
(add-to-list 'default-frame-alist '(height . my-frame-height)) 

इसके परिणामस्वरूप -

((height my-frame-height) 
(width my-frame-width)) 

और फ्रेम ज्यामिति से निर्णय लेना, उन चरों का मूल्यांकन कभी नहीं करता है। मैं इस सूची में अपनी फ्रेम-चौड़ाई और ऊंचाई के वास्तविक मूल्य कैसे दिखा सकता हूं? क्या मेरे पास बहुत सारे उद्धरण हैं? लेकिन मैं ऐड करने वाली सूची के मूल्यांकन से किसी भी हटा सकते हैं नहीं ...

उत्तर

28

इस प्रयास करें:

(setq my-frame-width 100) 
(setq my-frame-height 50) 
(add-to-list 'default-frame-alist `(width . ,my-frame-width)) 
(add-to-list 'default-frame-alist `(height . ,my-frame-height)) 

बोली के बजाय backquote का उपयोग करके आप उपयोग करने के लिए अनुमति देता है, एक पैरामीटर के मूल्यांकन के लिए मजबूर करने।

एलिसप संदर्भ मैनुअल देखें। सी-एक्स जानकारी टाइप करें, elisp संदर्भ मैनुअल के लिए खोजें, फिर उसमें बैकक्वॉट की खोज करें।

+0

बिल्कुल वही जो मैं खोज रहा था, धन्यवाद! इस तरह के प्रश्न मुझे याद दिलाते हैं कि मुझे व्यवस्थित रूप से elisp सीखने के लिए समय लेना चाहिए। –

+0

इसी तरह की समस्या के लिए [Emacs lisp वैरिएबल वैरिएबल का मूल्यांकन करें] (http://stackoverflow.com/questions/15485833/emacs-lisp-evaluate-variable-in-alist) एक ही समस्या के लिए .. –

+3

मुझे अंतर्ज्ञानी स्पष्टता पसंद है बैकक्वोट-एंड-कॉमा चीज। – Cheeso

11

mch के उत्तर में बैकक्वॉटर ऑपरेटर के विकल्प के रूप में, आप cons फ़ंक्शन का उपयोग कर सकते हैं। यह फ़ंक्शन पहले तर्क के साथ एक कॉन्स सेल का निर्माण करेगा क्योंकि इसकी कार और दूसरा तर्क इसके सीडीआर के रूप में होगा। आपके कोड में बिंदीदार जोड़ी नोटेशन इसके लिए कम है। इसलिए हम अपने कोड इस तरह से फिर से लिखने सकता है:

(setq my-frame-width 100) 
(setq my-frame-height 50) 
(add-to-list 'default-frame-alist (cons 'width my-frame-width)) 
(add-to-list 'default-frame-alist (cons 'height my-frame-height)) 

इस तरह, आप प्रतीकों आप सचमुच (चौड़ाई और ऊंचाई) की तरह प्रकट करना चाहते हैं उद्धृत कर सकते हैं और प्रतीकों जिनके मान आप (मेरे फ्रेम-चौड़ाई की तरह की जरूरत का मूल्यांकन और मेरी फ्रेम ऊंचाई)। मैं इस विधि को पसंद करता हूं क्योंकि यह अधिक सीधे आगे है। हालांकि, यह निश्चित रूप से राय का विषय है। भविष्य के संदर्भ के लिए यहां कुछ और information on cons and list है।

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