Heim >Web-Frontend >js-Tutorial >Die Mäeutik der Lambda-Kalküle
Glauben Sie, dass der Mensch die Informatik entdeckt oder erfunden hat?
Ich neige zur Entdeckung, weil die Turing-Maschine und die Lambda-Kalküle der Kirche 1936 unabhängig voneinander formalisiert wurden und dennoch beide universell ausdrucksstark sind (so dass man alles berechnen kann). Sehr unterschiedlich, aber 100 % gleichwertig.
Ich spreche nicht von der Erfindung des Hardware-Computers, der dank elektronischer Schaltkreise und ihrer Transistoren alle Formen annehmen und diese Konzepte allgemein umsetzen kann. Ich spreche hier von rechnerischer Logik und dem damit verbundenen rechnerischen Denken: Dieses eine schwebte in der Luft und wartete darauf, gefangen und eingesperrt zu werden.
Erinnern wir uns an unseren Mathematikunterricht, insbesondere an die Funktionen:
Sei f(x) = 2*x, eine Funktion, die den ihr übergebenen Wert mit 2 multipliziert. Nennen wir es Double.
Also Double(3) = 2*3 = 6
Und Double(4) = 2*4 = 8.
Einfach.
Gleiches gilt für f(x) = x 1 oder Inkrement.
Inkrement(3) = 3 1 = 4
Inkrement(4) = 4 1 = 5
Sehr einfach.
Die Lambda-Berechnung kann auf die gleiche Weise geschrieben werden:
f(x) = x ist beispielsweise eine Funktion, die den ihr übergebenen Wert zurückgibt.
Diese Funktion heißt I, oder Idiot oder Identity und ist eine der Grundlagen der Lambda-Rechnung.
Also Identität(3) = 3
Und Identität(4) = 4.
Zu einfach.
Es gibt andere, die weniger offensichtlich sind, deren Nutzen aber die Lambda-Kalküle entdeckt hat:
f(x, y) = x ist K, Kestrel oder Konstante: eine Funktion, die ihr erstes Argument zurückgibt.
Konstante(3, foo) = 3
Konstante(foo, 5) = foo
Hier ist noch einer:
f(x) = x(x) ist M, Mockingbird oder Self-Apply.
Aber es ist zu verdreht, um es mit einer Zahl verwenden zu können:
f(3) = 3(3) = 3 macht keinen Sinn, Argument 3 sollte eine Funktion sein, die wiederum mit einem Argument verwendet wird.
g(x) = foo hier ist eine Funktion, die jedes Mal foo zurückgibt! Cool, nennen wir sie Dummy.
Wenn also „Selbst anwenden“ f(x) = x(x) ist
Und Dummy ist g(x) = foo
Also Self-Apply(Dummy) = Dummy(Dummy) = foo
Nun ja, Dummy gilt für sich selbst, und da Dummy immer foo zurückgibt, erhalten wir in Ordnung foo.
Der kombinatorische Charakter der Lambda-Berechnung macht es sehr einfach, sie zu verstehen und zu manipulieren, aber auch wiederzuentdecken.
Testen Sie einfach alle möglichen Assoziationen und Kombinationen mit einer bestimmten Anzahl von Begriffen, um alle wirklich unterschiedlichen und nützlichen Funktionen zu finden.
Zum Beispiel haben wir herausgefunden, dass f(x, y, z) = x(y(z)) eine sehr nützliche Funktion ist, und wir haben sie B, Bluebird genannt oder Verfassen.
Sie müssen lediglich zwei Funktionen und einen Wert übergeben, um das Ergebnis dieser Operationskette zu erhalten, die für dieses dritte Argument ausgeführt wird.
Zusammensetzen(Inkrement, Inkrement, 3) = Inkrement(Inkrement(3)) = Inkrement(4) = 5
Compound(Double, Double, 10) = Double(Double(10)) = Double(20) = 40
Compound(Compose(Inkrement, Inkrement), Double, 10) = (Compose(Inkrement, Inkrement))(Double(10)) = Inkrement(Inkrement(20)) = Inkrement(21) = 22
Ich beginne mit dem Projekt, alle nützlichen Funktionen der Lambda-Rechnung neu zu entdecken und in JavaScript zu implementieren.
Ich werde Hilfe von einem Freund, Claude, bekommen, um schneller voranzukommen, indem ich alle möglichen Kombinationen erstelle und sie teste.
Wird er Erfolg haben? Und werden wir noch einmal erleben und spüren, was Alonzo Church 1936 durchgemacht hat?
Noch verrücktere Hoffnung: Können wir Neues entdecken, indem wir nach der Vollständigkeit dieser Kombinationen suchen?
Das obige ist der detaillierte Inhalt vonDie Mäeutik der Lambda-Kalküle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!