Chicken Scheme 有没有办法在运行时确定当前是否定义了变量?
(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)
(是的,我知道 scheme 不使用 defmacro,但我来自 Common Lisp。而且我似乎无法在这里加上反引号,否则一切都会陷入困境。)
我不希望宏的 INITIAL 调用采用仅在递归调用时才有意义的额外参数。我希望它通过其他方式知道。
我可以获取生成的代码来调用嵌套在第一个宏中并且在调用站点不存在的宏吗?例如,生成调用(,other-macro)
而不是(macro)
?
但这不应该起作用,因为宏不是像函数那样的一流对象......