gpt4 book ai didi

recursion - 在 Scheme 中,如何使用 lambda 创建递归函数?

转载 作者:行者123 更新时间:2023-12-03 10:36:20 25 4
gpt4 key购买 nike

我在一个 Scheme 类中,我很好奇在不使用定义的情况下编写递归函数。当然,主要问题是,如果函数没有名称,则不能在其内部调用函数。

我确实找到了这个例子:它是一个只使用 lambda 的阶乘生成器。

((lambda (x) (x x))
(lambda (fact-gen)
(lambda (n)
(if (zero? n)
1
(* n ((fact-gen fact-gen) (sub1 n)))))))

但我什至无法理解第一次调用,(lambda (x) (x x)):这到底是做什么的?你在哪里输入你想要得到阶乘的值?

这不是为了上课,这只是出于好奇。

最佳答案

(lambda (x) (x x))是一个在自身上调用参数 x 的函数。

您发布的整个代码块导致一个参数的函数。你可以这样称呼它:

(((lambda (x) (x x))
(lambda (fact-gen)
(lambda (n)
(if (zero? n)
1
(* n ((fact-gen fact-gen) (sub1 n)))))))
5)

用 5 调用它,并返回 120。

从高层次上考虑这个问题的最简单方法是第一个函数 (lambda (x) (x x)) , 是给 x 一个对自身的引用,所以现在 x 可以引用自己,因此是递归的。

关于recursion - 在 Scheme 中,如何使用 lambda 创建递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719004/

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