我自己在学习Scheme,最近我遇到了这段代码:
((lambda (gcd) (gcd (12 8 gcd))
(lambda(a b gcdnew)
(if (= b 0)
a
(gcdnew b (modulo a b) gcdnew))))
作者说这个有一个递归。这是一个古老的话题,所以我无法联系他。那么它在哪里(=递归)?似乎第二个'lambda'作为值第一个'gcd',所以我们的身体实际上是:
(gcdnew 8 4 gcdnew)
嗯,'gcdnew'作为'gcdnew'中的参数有什么意义?谢谢你的帮助。
答案 0 :(得分:2)
gcdnew
的意思是它保存了用于递归调用的函数。
外部lambda通过获取函数(gcd
)并将其应用于12和8,并将相同函数作为第三个参数传递来设置递归。
在内部函数内部,gcdnew
引用内部函数本身,它使用gcdnew
递归调用自身,确保在递归中传递它(即它本身)。
((lambda (gcd) (gcd 12 8 gcd))
(lambda (a b gcdnew)
(if (= b 0)
a
(gcdnew b (modulo a b) gcdnew))))
答案 1 :(得分:0)