首页 文章

方案:为什么评估letrec中定义的递归函数失败?

提问于
浏览
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?>

你能告诉我我错过了什么吗?校正也会很好,但请不要定义,但不是必要的 .

谢谢!

1 回答

  • 2

    Eval没有看到局部变量 . 在eval运行的范围内,是否具有创造性?绑定为局部变量但是,因为它位于(letrec)内部而不是它之后,它尚未绑定在全局范围内 . 请参阅eval文档,其中讨论了以下内容:

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

    我不认为你可以做你正在尝试用eval做什么 . 我不知道你为什么要这么做,所以我很难提出另一种选择 . 不过,您可以尝试使用(apply) .

相关问题