Wie funktioniert Haskells "boobs operator" in einfachem, nicht funktionierendem Englisch? [Duplikat]

9

In dieser Antwort Ссылка wird ein "Eulen-Operator" erwähnt:

%Vor%

um die absolute Fehlerfunktion in Punkt-freier Notation auszudrücken.

Wie auch immer, wie funktioniert diese Notation?

Könnten Sie es bitte einem nicht-funktionalen C ++ - Programmierer erklären?

    
Sergey K. 31.07.2013, 13:55
quelle

3 Antworten

10

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.

%Vor%

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.

    
J. Abrahamson 31.07.2013, 14:11
quelle
11

Also braucht es 2 Funktionen, f und g . Es gibt 2 Argumente für g und übergibt das Ergebnis dann an f oder

%Vor%

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,

%Vor%

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

%Vor%

Also ((.) . (.)) ist nur

%Vor%

oder wenn wir es in Ihrem Beispiel anwenden

%Vor%     
jozefg 31.07.2013 14:04
quelle
6

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.

    
Stephen Diehl 31.07.2013 14:40
quelle