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?