【发布时间】:2014-03-23 18:46:33
【问题描述】:
我对@987654324@ 感到困惑。我在schemers.org 中查看了eval 的规范。它说
程序:(eval expression environment-specifier)
这表明environment-specifier 是强制性要求。但是,当我使用两个解释器(repl.it 和Elk Scheme 的一个)测试eval 时,它们都可以在没有environment-specifier 的情况下工作。我的问题是:他们都是不符合标准的解释器,还是我在 schmers.org 上阅读的文档有误?
然后..
Elk Scheme 评估 (eval 5) 和 (eval (list + 5 6)) 没有问题,但 repl.it 的 Scheme 解释器无法评估它们。后者将评估 (eval `(+ 5 6)) 罚款但不是前两个表达式。我的问题是:repl.it 解释器的行为是否符合要求?
其他 Scheme 解释器如何处理前两个表达式?
【问题讨论】:
-
如果没有,它通常意味着
(interaction-environment),它是当前在 REPL 中处于活动状态的内容(如果有,则创建一个新的“默认”环境)。编辑:在很多情况下,您想指定自己的环境(即在增量编译器中,eval只是编译器的接口)。 -
似乎标准确实需要第二个参数。
-
我不确定一致性的定义是否很清楚,因为 Scheme 可以通过 rest args 支持可选参数。可以说,只要支持标准定义的情况,其他用法只是未定义的行为,不会影响一致性。
repl.it解释器所描述的行为非常奇怪,但也不影响一致性,因为带有一个参数的eval可以为所欲为,包括炸毁您的计算机。
标签: scheme