Haskell-Funktion zum Umkehren des Funktionsaufrufs

7

Ich habe ein Lambda \x f -> f x , das in einer Operation foldM verwendet wird, wobei x ein Wert und f :: a -> b ist.

Gibt es dafür eine eingebaute Funktion?

Kann ich

ersetzen? %Vor%

mit einigen f'

%Vor%

Ich dachte, dass flip dies tun würde, aber es benötigt drei Argumente ( flip :: (a -> b -> c) -> b -> a -> c )

Es ist wahrscheinlich ähnlich zu |> in F #.

    
Ralph 30.05.2012, 12:03
quelle

2 Antworten

20

Sie können flip id oder flip ($) verwenden (da ($) nur eine spezielle id für Funktionen ist):

%Vor%

Dies ist eine interessante Anwendung der partiellen Anwendung: id f x mit f ist eine Funktion ist nur f x . Offensichtlich ist dies auch das gleiche wie (flip id) x f , also ist flip id die Funktion, nach der Sie suchen.

Wenn Sie abenteuerlustig sind, versuchen Sie, den Typ von flip id oder flip ($) manuell abzuleiten. Es macht Spaß:)

    
Niklas B. 30.05.2012, 12:07
quelle
8

Ja, es heißt flip :: (a -> b -> c) -> b -> a -> c , z. %Code%. Weitere Informationen und Quellen zum Thema Hack: flip .

Was Sie wollen, ist einfach die Argumente der Funktionsanwendung umzukehren, oder? Nun, da flip (>) 3 5 == True eine Funktion ist, können Sie ($) schreiben. Lass sehen was passiert. Hier ist die Quelle für die zwei Prelude-Funktionen:

%Vor%

Also, im Grunde, wenn Sie die Typen zusammenstellen, wird flip ($) :: b -> (b -> c) -> c

%Vor%

Wenn Sie den tatsächlichen Definitionen der Funktionen folgen:

%Vor%     
Riccardo T. 30.05.2012 12:04
quelle

Tags und Links