Gibt es in Chicken Scheme eine Möglichkeit, zur Laufzeit zu bestimmen, ob eine Variable aktuell definiert ist?Wie kann man feststellen, ob eine Variable in Chicken Scheme existiert?
(let ((var 1))
(print (is-defined? var)) ; #t
(print (is-defined? var)) ; #f
EDIT: XY Problem.
Ich schreibe ein Makro, das Code generiert. Dieser generierte Code muss das Makro in gegenseitiger Rekursion aufrufen - das Makro, das einfach aufgerufen wird, funktioniert nicht. Wenn das Makro rekursiv aufgerufen wird, muss es sich anders verhalten als beim ersten Aufruf. Ich würde eine verschachtelte Funktion verwenden, aber uh .... es ist ein Makro.
Raute Beispiel:
(defmacro m (nested)
(if nested
BACKQUOTE(print "is nested")
BACKQUOTE(m #t)
(ja, ich weiß Schema nicht defmacro nicht verwendet, aber ich komme von Common Lisp Auch kann ich nicht einfache Anführungszeichen scheinen, ohne es hier zu setzen alle gehen. zur Hölle.)
Ich möchte nicht, dass der Aufruf INITIAL des Makros ein zusätzliches Argument nimmt, das nur dann Bedeutung hat, wenn es rekursiv aufgerufen wird. Ich will es auf andere Weise wissen.
Kann ich den generierten Code abrufen, um ein Makro aufzurufen, das innerhalb des ersten Makros verschachtelt ist und möglicherweise nicht an der Aufrufsite vorhanden ist? Beispielsweise Code generieren, der (,other-macro)
statt (macro)
aufruft?
Aber das sollte nicht funktionieren, weil ein Makro-Objekt nicht ein First-Class ist wie eine Funktion ...
Dies sollten Sie zur Kompilierzeit/Schreibzeit wissen. XY? Was planen wir damit? – Sylwester
Ich habe Details zu meiner Frage hinzugefügt. –