2

我正在用 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?>

你能告诉我我错过了什么吗?更正也很好,但请不要定义,虽然没有必要。

谢谢!

4

1 回答 1

2

eval 看不到局部变量。在 eval 运行的范围内,是否有创意?被绑定为局部变量,但是因为它在 (letrec) 内部而不是在它之后,所以它还没有被绑定到全局范围内。请参阅 eval 的文档,其中讨论了这一点:

http://docs.racket-lang.org/guide/eval.html

我不认为你可以用 eval 做你想做的事情。我不知道你为什么要这样做,所以我很难提出替代方案。不过,您可以尝试使用 (apply)。

于 2011-02-18T17:38:51.407 回答