So einfach wie möglich (.).(.)
, manchmal auch (.:)
geschrieben, ist die Funktionszusammensetzung, wenn die auf der rechten Seite zusammengesetzte Funktion zwei fehlende Argumente hat. Wenn Sie versuchen, (.)
direkt zu verwenden, gibt es keine Überprüfung, obwohl es aufgrund der Idee einer funktionalen "Installation" sehr verlockend ist.
Es lohnt sich auch darüber nachzudenken, wie (.:)
eine Art der Installation von Data.Function.on
ist.
on
verwendet eine unäre Funktion, um die zwei Eingaben einer binären Funktion zu transformieren. (.:)
verwendet eine binäre Funktion und wandelt damit eine unäre Funktion in eine binäre Funktion um.
Also braucht es 2 Funktionen, f
und g
. Es gibt 2 Argumente für g
und übergibt das Ergebnis dann an f
oder
In Typen ist dies
%Vor%Damit vermeiden wir es, in längeren Zusammenstellungen von Funktionen Zwischenwerte zu benennen, da viel Haskell-Code so geschrieben ist wie
%Vor% Nun sagen wir, dass foo
quux
2 Argumente nicht 1 geben soll,
Das ist irritierend lang, also können wir im Vergleich zu dem, was wir vorher haben, stattdessen
schreiben %Vor%was viel sauberer ist.
Eine lange (verwirrende) Erklärung, wie es funktioniert:
Nun% .
ist nur eine Funktion, die so implementiert ist
Also ((.) . (.))
ist nur
oder wenn wir es in Ihrem Beispiel anwenden
%Vor%Angenommen, Sie können die Lambda-Notation in Haskell lesen, es ist sehr einfach:
%Vor%So einfache Ausdrücke könnten sein:
%Vor%Lambdabot hat einen Befehl Pointful , der Pointfree in Pointful-Funktionen konvertieren kann. Ausgedrückt als ein einfacher Lambda-Ausdruck wird es ziemlich klar, Funktion höherer Ordnung.
%Vor%Also, was macht das auf Englisch, es nimmt eine Funktion in seinem ersten Argument "i" und wendet das auf das Ergebnis einer anderen Funktion "b" an, die auf die Argumente "c" und "f" angewendet wird.
So ist es wirklich diese Funktion, sobald Sie es normalisieren:
%Vor%Was ziemlich einfach zu verstehen ist, wie das der absolute Fehler ist.
Wenn Sie eine Ableitung dessen sehen wollen, was Lambdabot hinter den Kulissen tut, schauen Sie sich diesen Beitrag an, was nur vordergründig ist Beta-Reduktion der Lambda-Terme. Der einzige Trick hier ist, dass wir Infix- und Präfix-Operatoren mischen, derselbe Begriff könnte deutlicher geschrieben werden als:
%Vor%Dann wird klar, dass es nur "Zusammensetzung der Funktionszusammensetzung" ist.
Tags und Links haskell functional-programming pointfree