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.