warum ist defun nicht dasselbe wie (setq <name> <lambda>)?

Ich bin verwirrt darüber, wie defun Makro funktioniert, weil

(defun x () "hello")

Erzeugt die Funktion x, aber das Symbol x bleibt weiterhin ungebunden.

Wenn ich Lambda an x ​​binden möchte, hat x einen Wert, der vom Interpreter jedoch nicht als Funktion in der folgenden Form behandelt wird:

(x)

Ich denke, dass es mit der Tatsache zusammenhängt, dass defun die Funktion in einem globalen Umfeld definieren sollte, aber ich bin mir nicht sicher, was es genau bedeutet. Warum kann ich es in der aktuellen Umgebung nicht spiegeln?

Gibt es eine Möglichkeit, den Interpreter zu zwingen, das Symbol als Funktion zu behandeln, wenn Lambda daran gebunden war? Zum Beispiel:

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

P .: Ich benutze SBCL.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage