Общая проблема заключается в том, что вам нужно xи yнужно оценить, прежде чем они будут вставлены в somelist. Проблема с цитируемым списком (с 'синтаксисом читателя) заключается в том, что quoteэто специальная форма, которая не оценивает его аргумент. Согласно документации:
(quote ARG)
Вернуть аргумент, не оценивая его. (quote x)доходность x. Предупреждение: quoteне создает свое возвращаемое значение, а просто возвращает значение, которое было предварительно создано читателем Lisp ...
Следовательно, вам нужно либо заключить в кавычки, либо использовать функцию, которая оценивает аргументы.
Бэквотирование позволяет вам выборочно оценивать элементы списка с кавычками с помощью ,синтаксиса:
(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).