有没有人建议我如何检查变量x是否被绑定?
我想区分未绑定的变量和符号,但symbol?
谓词在这里并不好,因为(symbol? x)
给了我一个错误。
我只处理未绑定的变量!
我给你举个例子:
(pattern-rule
`(car ,(?'expr))
(lambda (expr) `,(car (fold expr))))
此代码是文件夹过程的一部分,它是解析器的一部分。
(fold '(car (cons '1 '2)))
上返回的评估为'1
(fold '(car x))
上返回的评估应为(car x)
(我的意思是,字符串(car x)
)
但我无法弄清楚如何做这个部分!
答案 0 :(得分:2)
我知道您正在编写自己的解析器?如果是这样,您需要明确表示环境。每次遇到绑定构造(例如lambda
或let
)时,都会将绑定变量添加到环境中。当你需要知道变量是否被绑定时,你可以在环境中查找它 - 如果它存在,那么它是绑定的,如果它不是未绑定的。