gpt4 book ai didi

recursion - 方案:为什么评估这个定义在 letrec 中的递归函数会失败?

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:21 25 4
gpt4 key购买 nike

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

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

谢谢!

最佳答案

Eval 看不到局部变量。在eval运行的范围内,is-creative?被绑定(bind)为一个局部变量,但是,因为它在 (letrec) 内部而不是在它之后,所以它还没有被绑定(bind)在全局范围内。请参阅 eval 的文档,其中对此进行了讨论:

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

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

关于recursion - 方案:为什么评估这个定义在 letrec 中的递归函数会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com