почему defun не совпадает с (setq <имя> <лямбда> )?

Я запутался в том, как работает макрос defun, потому что

(defun x () "hello")

создаст функцию x, но символ x все равно будет несвязанным.

Если я привяжу некоторую лямбду к x, тогда x будет иметь значение, но интерпретатор не будет рассматривать его как функцию в такой форме:

(x)

Я думаю, что это связано с тем, что defun должен определять функцию в глобальном окружении, но я не уверен, что именно это означает. Почему я не могу затенить его в текущей среде?

Есть ли способ заставить интерпретатор рассматривать символ как функцию, если к нему привязана какая-то лямбда? Например:

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

P.S. :Я использую SBCL.

20
задан Filipp 26 June 2012 в 17:21
поделиться