In SICP 1.2.1 gibt es eine Funktion, die eine rationale Zahl wie folgt erzeugt:
%Vor%Ich bin nur neugierig, wie Sie das Gleiche mit Lambda statt Let implementieren können, ohne GCD zweimal aufzurufen. Ich konnte es selbst nicht herausfinden.
Betrachten Sie SICP Abschnitt 1.3.2 ,
%Vor%entspricht
%Vor%Also Ihre Vorgehensweise,
%Vor%sollte äquivalent zu
sein %Vor%Lassen Sie uns zwei einfache Fälle untersuchen, damit wir verstehen können, wie wir jede Funktion, die let mit Lambda verwendet, umschreiben können:
In unserem ersten Fall haben wir einen vermietet. Diese Funktion ist sehr einfach, sie gibt eine gegebene Eingabe zurück, indem 10 hinzugefügt wird:
%Vor%Nun lassen Sie uns dies zu einem Ausdruck machen, der lambda verwendet:
%Vor%Wie Sie sehen, gibt test-lambda eine Lambda-Auswertung zurück, die mit dem Wert 10 ausgewertet wird. Wenn wir das testen, können wir sagen:
%Vor%welches 20 zurückgibt.
In unserem Fall haben wir zwei Aussagen:
%Vor%Wir können das mit Lambda so schreiben:
%Vor%Wir untersuchen nun jeden der Lambda-Ausdrücke, die ihnen einen Wert geben, und der innerste Lambda-Ausdruck kümmert sich darum, was wir berechnen wollen, indem wir die Variablennamen verwenden, die jedem Lambda-Ausdruck zugewiesen wurden.
Ich hoffe, das war klar und könnte anderen helfen, klarer zu sehen!