dlaczego defun nie jest tym samym co (setq <nazwa> <lambda>)?

Jestem zdezorientowany, jak działa makro defun, ponieważ

(defun x () "hello")

utworzy funkcję x, ale symbol x nadal będzie niezwiązany.

Jeśli powiążę jakąś lambdę z x, x będzie miała wartość, ale nie będzie traktowana przez interpreter jako funkcja w takiej formie:

(x)

Myślę, że jest to związane z faktem, że defun powinien definiować funkcję w środowisku globalnym, ale nie jestem pewien, co to dokładnie znaczy. Dlaczego nie mogę go śledzić w obecnym środowisku?

Czy jest jakiś sposób wymuszenia traktowania traktora interpretera jako funkcji, jeśli jakiś lambda był z nim związany? Na przykład:

(setq y (lambda () "I want to be a named function"))
(y)

P.S .: Używam SBCL.

questionAnswers(2)

yourAnswerToTheQuestion