変数が現在定義されているかどうかを実行時に決定する方法はありますか?チキンスキームに変数が存在するかどうかを調べる方法は?
(let ((var 1))
(print (is-defined? var)) ; #t
(print (is-defined? var)) ; #f
EDIT:XY problem。
コードを生成するマクロを作成しています。この生成されたコードは、相互再帰でマクロを呼び出す必要があります。マクロを呼び出すだけでは動作しません。マクロが再帰的に呼び出されるとき、最初に呼び出されたときとは異なる振る舞いをする必要があります。ネストされた関数を使用しますが、それはマクロです。
ラフ例:
(defmacro m (nested)
(if nested
BACKQUOTE(print "is nested")
BACKQUOTE(m #t)
(はい、私は、スキームはdefmacroの使用していないけど、私は、Common Lispのから来ている。また、私はそれなしでここにすべての予定をバッククォートを置くように見えることはできません。 )
マクロのINITIAL呼び出しでは、再帰的に呼び出されたときにのみ意味を持つ余分な引数を取ることは望ましくありません。私は他の手段でそれを知りたい。
最初のマクロ内でネストされ、コールサイトに存在しないマクロを呼び出すために、生成されたコードを取得できますか?たとえば、(macro)
の代わりに(,other-macro)
を呼び出すコードを生成しますか? Schemeはレキシカルスコープされているので
これはコンパイル時/書き込み時に知っておく必要があります。 XY?それをどうする予定ですか? – Sylwester
私は質問に詳細を追加しました。 –