> 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?
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.