i

Fachkonzept - Currying

Eine neue Sichtweise

Eine Funktion mit mehreren Übergabeparametern kann man in eine Folge von Funktionen mit nur einem Übergabeparameter umwandeln. Man nennt diesen Vorgang Currying.

> String.replace "a" "u" "Hand"
"Hund" : String
> (String.replace "a" "u") "Hand"
"Hund" : String
> ((String.replace "a") "u") "Hand"
"Hund" : String

Das Black-Box-Diagramm verdeutlicht diese Sichtweise.

Black-Box-Diagramm String.replace

Partielle Funktionsanwendung

Wenn man bei einer Funktion mit mehreren Parametern nur einige dieser Parameter übergibt, so entstehen - passend zu der Sichtweise durch Currying - jeweils neue Funktionen. Diese Funktionen entstehen durch eine partielle Funktionsanwendung bei der Ausgangsfunktion.

> String.replace
<function> : String -> String -> String -> String
> String.replace "a"
<function> : String -> String -> String
> String.replace "a" "u"
<function> : String -> String

Nutzen partieller Funktionsanwendung

Partielle Funktionsanwendung wird häufig benutzt, wenn man eine Funktion mit mehreren Parametern nur in einer ganz speziellen Weise verwenden möchte. Die häufigste Art der Anwendung besteht darin nur den letzten Parameter auszulassen und die daraus resultierende Funktion, die nur noch einen Parameter erwartet, an eine Funktion wie List.map zu übergeben. Hier ein Beispiel:

> List.map (String.replace "a" "u") ["Hand","Rahm","Rate"]
["Hund","Ruhm","Rute"] : List String

Man kann aber auch Funktionen erzeugen, die mehrere Parameter erwarten, indem man mehrere Parameter beim Erzeugen der resultierenden Funktion weglässt:

> ersetzeA = String.replace "a"
<function> : String -> String -> String
> ersetzeA "e" "Banane"
"Benene" : String
> ersetzeA "u" "Banane"
"Bunune" : String

Suche

v
8.2.2.6.6
dev.inf-schule.de/deklarativ/fp_elm/elm_programme/funktionenerzeugen/konzept_currying
dev.inf-schule.de/8.2.2.6.6
dev.inf-schule.de/@/page/13mNCJXxaGIojd8Q

Rückmeldung geben