| 

.NET C# Java Javascript Exception

6
Warum gilt (Beispielcode in F#), dass

> let add = fun a b -> a + b;;
val add : int -> int -> int

gleich

> let add = fun a -> fun b -> a + b;;
val add : int -> int -> int

ist?

Meine Vermutung ist, dass bei der zweiten Variante zunächst der Wert von a eingesetzt wird, und dann daraus eine Funktion entsteht, in der a sozusagen fixiert ist, und dann nur noch b variabel ist.

Stimmt das?

Falls ja, ist das das, was man als Partial Function Application bezeichnet?
16.08.2011
Golo Roden 2,7k 3 9
2
Hi Golo, ich hab auch nur eine Vermutung die sich auf deiner stützt (große Hilfe ist das ;-), aber demnach sieht das für mich nach Currying aus.
gfoidl 16.08.2011
Hmmmmm, okay, das wäre eine Idee ...
Golo Roden 16.08.2011
1 Antwort
8
Hallo Golo,

ich sag's offen: mit F# hab ich bislang so gut wie noch gar keinen Kontakt gehabt. Aber mir gefällt codekicker auch deshalb, weil es mir gelegentlich einen Anstoß gibt, etwas neues zu recherchieren. So verhält es sich auch mit Deiner Frage.

Und siehe da:
Dem Buch F# Programming zufolge handelt es sich hier um ein Konzept namens Currying. F# nutzt das offenbar automatisch, um Funktionen mit mehreren Parametern darzustellen als Komposition von einparametrigen Funktionen (wobei der Return-Typ von n-1 dieser Funktionen wieder eine Funktion ist). Und dieser Blog hier versucht zu erklären, was Currying ist und dass es in gewisser Weise gerade das Gegenteil von Partial Function Application ist. Wenn ich den Blog richtig verstehe, so wäre Partial Function Application der Aufruf von add mit nur einem Parameter (z.B. 5), resultierend in einer Funktion, die nur noch ein Argument erwartet und zu diesem 5 addiert.

Einen schönen Abend,
Matthias
16.08.2011
Matthias Hlawatsch 13,2k 4 9
1
Cool, vielen Dank!
Und dass man mal auf diesem Wege neue Denkanstöße bekommt, ist doch schön :-)
Golo Roden 16.08.2011

Stelle deine .net-Frage jetzt!