Wie berechnet Y-combinator den Fixpunkt programmatisch?

Ich glaube, ich verstehe die Idee des Y-Kombinators mathematisch: Er gibt den Fixpunkt eines gegebenen funktionalen @ zurücF, alsof = Y(F) wof erfülltf == F(f).

Aber ich verstehe nicht, wie es das eigentliche Berechnungsprogramm macht?

Nehmen wir das angegebene Javascript-BeispielHie:

var Y = (F) => ( x => F( y => x(x)(y) ) )( x => F( y => x(x)(y) ) )
var Factorial = (factorial) => (n => n == 0 ? 1 : n * factorial(n-1))

Y(Factorial)(6) == 720    // => true
computed_factorial = Y(Factorial)

Der Teil, den ich nicht verstehe, ist, wie dascomputed_factorial -Funktion (der Fixpunkt) wird tatsächlich berechnet? Wenn Sie die Definition von Y verfolgen, wird ein @ angezeig unendlich Rekursion Bei derx(x) part, ich kann dort keinen implizierten Beendigungsfall sehen. Es kehrt jedoch seltsamerweise zurück. Kann mir jemand erklären?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage