por que defun não é o mesmo que (setq <name> <lambda>)?
Estou confuso sobre como funciona a macro defun, porque
(defun x () "hello")
irá criar a função x, mas o símbolo x ainda será desvinculado.
Se eu ligar um pouco de lambda a x, então x terá um valor, mas ele não será tratado pelo interpretador como função em uma forma como esta:
(x)
Eu acho que isso está relacionado ao fato de que o defun deve definir a função no ambiente global, mas não tenho certeza do que isso significa exatamente. Por que não posso sombrear no ambiente atual?
Existe alguma maneira de forçar o símbolo de tratamento do intérprete como função se algum lambda estivesse ligado a ele? Por exemplo:
(setq y (lambda () "I want to be a named function"))
(y)
P.S .: estou usando o SBCL.