変数が現在定義されているかどうかを実行時に確認する方法がチキン スキームにありますか?
(let ((var 1))
(print (is-defined? var)) ; #t
(print (is-defined? var)) ; #f
編集: XY 問題。
コードを生成するマクロを書いています。この生成されたコードは相互再帰でマクロを呼び出す必要があります。マクロが単にそれ自体を呼び出すだけでは機能しません。マクロが再帰的に呼び出されるとき、最初に呼び出されたときとは異なる動作をする必要があります。ネストされた関数を使用しますが、ええと....それはマクロです。
大まかな例:
(defmacro m (nested)
(if nested
BACKQUOTE(print "is nested")
BACKQUOTE(m #t)
(はい、スキームが defmacro を使用していないことは知っていますが、私は Common Lisp から来ています。また、すべてが地獄に行かなければ、ここに逆引用符を入れることはできないようです。)
マクロの INITIAL 呼び出しで、再帰的に呼び出された場合にのみ意味を持つ余分な引数を取りたくありません。他の手段で知ってもらいたい。
生成されたコードで、最初のマクロ内にネストされていて呼び出しサイトに存在しないマクロを呼び出すことはできますか? たとえば、?(,other-macro)
の代わりに呼び出すコードを生成します。(macro)
しかし、マクロは関数のようなファーストクラスのオブジェクトではないため、それは機能しないはずです...