0

私は自分でSchemeを勉強していますが、最近このコードに遭遇しました:

((lambda (gcd) (gcd (12 8 gcd))
    (lambda(a b gcdnew)
        (if (= b 0)
        a
        (gcdnew b (modulo a b) gcdnew))))

著者は、これには再帰があると述べました。それは古い話題だったので、私は彼に連絡できませんでした。では、それ (=再帰) はどこにあるのでしょうか? 2 番目の「ラムダ」が値として最初の「gcd」に移動するように見えるため、実際の体は次のようになります。

(gcdnew 8 4 gcdnew) 

さて、「gcdnew」のパラメーターとして「gcdnew」のポイントは何ですか? 手伝ってくれてありがとう。

4

2 に答える 2

0

これは Y コンビネータとして知られています。

そして、明示的な再帰をサポートしていない言語で再帰を行うことは実際に可能です。(実際、再帰的に定義する必要さえありません)

http://mvanier.livejournal.com/2700.html

于 2013-05-10T12:39:15.190 に答える