Ich bin verwirrt darüber, wie defun Makro funktioniert, weilwarum defun ist nicht das gleiche wie (setq <name><lambda>)?
(defun x() "hello")
wird Funktion x erstellen, aber das Symbol X wird noch ungebunden sein.
Wenn ich etwas Lambda x binden werden, dann wird x einen Wert haben, aber es wird nicht durch Dolmetscher als Funktion in Form so behandelt werden:
(x)
Ich denke, dass es die in Beziehung steht Tatsache, dass defun Funktion in der globalen Umgebung definieren sollte, aber ich bin mir nicht sicher, was es genau bedeutet. Warum kann ich es nicht in der aktuellen Umgebung beschatten?
Gibt es eine Möglichkeit, Interpreter behandeln Symbol als Funktion zu erzwingen, wenn einige Lambda daran gebunden war? Zum Beispiel:
(setq y (lambda() "I want to be a named function"))
(y)
S.S .: Ich benutze SBCL.