सामान्य मुद्दा यह है कि आपको इसमें सम्मिलित होने से पहले ज़रूरत है x
और y
मूल्यांकन किया जाना है somelist
। उद्धृत सूची ( '
रीडर सिंटैक्स के साथ) के साथ मुद्दा यह है कि quote
एक विशेष रूप है जो इसके तर्क का मूल्यांकन नहीं करता है। डॉकस्ट्रिंग के अनुसार:
(quote ARG)
इसका मूल्यांकन किए बिना, तर्क लौटाएं। (quote x)
पैदावार x
। चेतावनी: quote
इसकी वापसी मूल्य का निर्माण नहीं करता है, लेकिन सिर्फ वह मूल्य देता है जो लिस्प पाठक द्वारा पूर्व-निर्मित किया गया था ...
इसलिए, आप या तो जरूरत backquote या एक समारोह है कि मूल्यांकन करता है तर्क का उपयोग करें।
Backquoting आपको ,
सिंटैक्स के साथ चुनिंदा सूची के तत्वों का मूल्यांकन करने की अनुमति देता है :
(setq x "x-val" y "y-val" z "z-val" somelist nil)
'(x y z) ; => (x y z)
`(x ,y z) ; => (x "y-val" z)
(add-to-list 'somelist `(x y ,z)) ; => ((x y "z-val"))
वैकल्पिक रूप से, आप उपयोग कर सकते हैं cons
(जैसा कि @tarsius उनके उत्तर में सुझाव देता है) या, तत्वों की एक मनमानी संख्या के लिए list
:
(add-to-list 'somelist (cons x y)) ; => (("x-val" . "y-val"))
(setq somelist nil) ; reset
(add-to-list 'somelist (list x y z)) ; => (("x-val" "y-val" "z-val"))
किसका उपयोग करना है यह इस बात पर निर्भर करता है कि आपको तत्वों के साथ क्या करना है।
`(,x . ,y)
।