2012-03-14 13 views

उत्तर

12

लिस्प में, ´ -symbol उद्धरण शेष अभिव्यक्ति होगी। इसका अर्थ यह है कि मूल्य अभिव्यक्ति जैसा ही लिखा गया है, फ़ंक्शन कॉल का मूल्यांकन नहीं किया जाता है, चर को इसके मूल्य के साथ प्रतिस्थापित नहीं किया जाता है।

सबसे सीधा-आगे तरीका फ़ंक्शन list का उपयोग करना है जो एक सूची बनाता है , के रूप में एक और जवाब में सुझाव दिया

(completing-read "input: " (list "1" "2" my-defvar)) 

बेशक, आप भी backquote सिंटैक्स का उपयोग कर सकते हैं: तत्वों का, मूल्यांकन करने के बाद यह बहस है, उदाहरण के लिए। यह आपको एक जटिल अभिव्यक्ति उद्धृत करने की अनुमति देता है लेकिन (यानी मूल्यांकन) इसके हिस्सों को अनकोट करता है। हालांकि, इस साधारण मामले में मुझे नहीं लगता कि यह नौकरी के लिए सही उपकरण है।

+0

धन्यवाद। यह काम करता हैं। – coordinate

6

my-defvar एक चर के रूप में मूल्यांकन नहीं किया जा रहा है, इसे प्रतीक के रूप में व्याख्या किया जा रहा है।

Emacs Lisp: evaluate variable in alist देखें।

तो:

(defvar my-defvar "test") 
(completing-read "input: " `("1" "2" ,my-defvar)) 

काम करना चाहिए।

अद्यतन: @ Lindydancer के answer में एक और उचित समाधान दिया गया है, लेकिन मैं इसे संदर्भ के लिए यहां छोड़ देता हूं।

+1

इसे * स्ट्रिंग अक्षर * के रूप में मूल्यांकन नहीं किया जा रहा है (जैसे कोट्स का उपयोग नहीं किया जाता है), इसके बजाय इसे * प्रतीक * के रूप में व्याख्या किया जा रहा है। – Lindydancer

+0

मैंने अब इसे सही किया है, हालांकि मुझे लगता है कि आपका उत्तर अधिक उपयुक्त है। – MGwynne