F #, prägnante Möglichkeit, map4 mit map2 und map3 zu definieren

8

Diese Frage dient nur der Unterhaltung. Bitte nehmen Sie diese Frage nicht zu ernst.

Ich lerne gerade F #, und ich bin interessiert zu sehen, ob es einen prägnanten Weg gibt, um map4 zu definieren, indem ich die vorhandenen Funktionen List.map2, List.map3, Pipe vorwärts / rückwärts, Vorwärts / Rückwärtskomposition usw. benutze.

d. h.

%Vor%

Ich kann das rekursiv lösen oder einen neuen Operator definieren (siehe folgende URL)

Ссылка

Ссылка

Ich kann das auch lösen, indem ich List.map2 und List.map3 mit partiell angewendeten Funktionen f (a, b,?,?)

kombiniere %Vor%

Ich kann versuchen, meinen obigen Code zu verkürzen, indem ich die Vorwärtskomposition verwende (und sie so abstrakt / verwirrend wie möglich mache)

%Vor%

Ich würde gerne wissen, ob ich es noch weiter verkürzen kann, indem ich "f" und "a" loslasse, was zu folgendem führt:

%Vor%

Es wird es wahrscheinlich unnötig verwirrend machen, aber es wird ziemlich cool sein. Danke.

BEARBEITEN:

Anpassen der Antwort von TheInnerLight:

%Vor%     
CH Ben 20.03.2017, 10:36
quelle

2 Antworten

10

Dies ist eine gute Anwendung für den Anwendungsstil der Programmierung, d. h. anwendungsorientierte Funktoren .

Definieren Sie einfach die Funktion apply und einige Hilfsoperatoren:

%Vor%

Verwenden Sie dann map und apply, um mapN functions zu definieren.

%Vor%

Wie Sie sehen, können Sie weitere Argumente hinzufügen, um beliebige mapN s nach Herzenslust zu definieren.

Da die Frage speziell nach der Verwendung von map2 oder map3 gefragt wird, können Sie dies im selben Stil tun, auch wenn es etwas knapper ist, z. B .:

%Vor%

Hoffentlich haben Sie die Idee.

Als kleine Nebenbemerkung ist es erwähnenswert, dass jede Monade automatisch ein anwendungsspezifischer Funktor ist, also gibt es eine breite Palette von Typen, mit denen Sie dieses Muster verwenden können, hier ist ein Async Beispiel.

%Vor%     
TheInnerLight 20.03.2017, 10:43
quelle
0

Nach vielen Experimenten erstelle ich die folgende "punktfreie" Antwort:

%Vor%

Leider wird der F # Compiler einen "Value restriction" Fehler erzeugen, siehe: Ссылка

Und damit werde ich mich zufrieden geben mit:

%Vor%     
CH Ben 29.11.2017 08:07
quelle

Tags und Links