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.

questionAnswers(2)

yourAnswerToTheQuestion