सामान्य मुद्दा यह है कि आपको इसमें सम्मिलित होने से पहले ज़रूरत है 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)।