Lisp comum, referência ao valor e valor real
Considere este trecho de código:
(defvar lst '(1 1))
(defmacro get-x (x lst)
`(nth ,x ,lst))
(defun get-y (y lst)
(nth y lst))
Agora, suponha que eu queira alterar o valor dos elementos da lista chamados lst, acarr com get-x e a cdr com get-y. Enquanto tento alterar o valor com get-x (com setf) tudo corre bem, mas se eu tentar com get-y sinaliza um erro (encurtado):
; pegou STYLE-WARNING:; função indefinida: (SETF GET-STUFF)
Por que isso acontece
Eu suspeito que isso acontece porque a macro simplesmente se expande e a função nth simplesmente retorna uma referência ao valor de um elemento na lista e a função, por outro lado, avalia a chamada de função para nth e retorna o valor do valor referenciado (parece confuso
Estou correto em minhas suspeitas? Se eu estiver certo, como saberemos o que é simplesmente uma referência a um valor e a um valor rea