我在Scheme(DrRacket Pretty Big)中写了一个愚蠢的letrec:
(letrec
((is-creative?
(lambda (writing)
(if (null? writing)
#f
(is-creative?
(eval writing))))))
(is-creative?
(quote is-creative?)))
语法检查没问题,但是运行它失败了:
reference to undefined identifier: is-creative?
调试器在失败时说:
is-creative? => #<procedure:is-creative?>
你能告诉我我错过了什么吗?校正也会很好,但请不要定义,但不是必要的。
谢谢!
答案 0 :(得分:2)
Eval没有看到局部变量。在eval运行的范围内,是否具有创造性?绑定为局部变量但是,因为它位于(letrec)内部而不是它之后,它尚未绑定在全局范围内。请参阅eval的文档,其中讨论了这个:
http://docs.racket-lang.org/guide/eval.html
我认为你不能做你正在尝试用eval做的事情。我不知道你为什么要这么做,所以我很难提出另一种选择。不过,您可以尝试使用(应用)。