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%Dies ist eine gute Anwendung für den Anwendungsstil der Programmierung, d. h. anwendungsorientierte Funktoren .
Definieren Sie einfach die Funktion apply
und einige Hilfsoperatoren:
Verwenden Sie dann map und apply, um mapN
functions zu definieren.
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 .:
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.
Tags und Links f#