一个isBound?计划中的谓词

时间:2014-11-29 22:28:48

标签: scheme read-eval-print-loop

有没有人建议我如何检查变量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)

但我无法弄清楚如何做这个部分!

1 个答案:

答案 0 :(得分:2)

我知道您正在编写自己的解析器?如果是这样,您需要明确表示环境。每次遇到绑定构造(例如lambdalet)时,都会将绑定变量添加到环境中。当你需要知道变量是否被绑定时,你可以在环境中查找它 - 如果它存在,那么它是绑定的,如果它不是未绑定的。