El problema general es que se necesita xy ypara ser evaluado antes de que se insertan en somelist. El problema con la lista citada (con 'sintaxis como lector) es que quotees una forma especial que no evalúa su argumento. De acuerdo con la cadena de documentación:
(quote ARG)
Devuelve el argumento, sin evaluarlo. (quote x)rendimientos x. Advertencia: quoteno construye su valor de retorno, sino que solo devuelve el valor que fue preconstruido por el lector Lisp ...
Por lo tanto, necesita una comilla inversa o usar una función que evalúe los argumentos.
El backquoting le permite evaluar elementos de una lista de backquoted selectivamente con la ,sintaxis:
(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"))
Alternativamente, se puede utilizar cons(como @tarsius sugiere en su respuesta) o, para un número arbitrario de elementos, 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"))
Cuál usar depende de lo que necesite hacer con los elementos.
`(,x . ,y).