Masalah umum adalah bahwa Anda perlu xdan ydievaluasi sebelum dimasukkan somelist. Masalah dengan daftar yang dikutip (dengan 'sintaks sebagai pembaca) adalah quotebentuk khusus yang tidak mengevaluasi argumennya. Menurut dokumen itu:
(quote ARG)
Kembalikan argumen, tanpa mengevaluasinya. (quote x)hasil panen x. Peringatan: quotetidak membangun nilai kembalinya, tetapi hanya mengembalikan nilai yang telah dibangun sebelumnya oleh pembaca Lisp ...
Oleh karena itu, Anda perlu mengutip atau menggunakan fungsi yang mengevaluasi argumen.
Backquoting memungkinkan Anda untuk mengevaluasi elemen daftar backquoted selektif dengan ,sintaks:
(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"))
Sebagai alternatif, Anda dapat menggunakan cons(sebagai @tarsius menyarankan dalam jawabannya) atau, untuk jumlah sewenang-wenang elemen, 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"))
Yang digunakan tergantung pada apa yang perlu Anda lakukan dengan elemen.
`(,x . ,y).