8

Viele funktionale Programmiersprachen unterstützen curried parameters. Um Curry-Funktionen zu unterstützen, sind die Parameter der Funktion im Wesentlichen ein Tupel, bei dem der letzte Parameter weggelassen werden kann, wodurch eine neue Funktion entsteht, die ein kleineres Tupel benötigt.Gibt es eine Programmiersprache, die currying durchführt, wenn benannte Parameter weggelassen werden?

Ich denke daran, eine Sprache zu entwerfen, die immer Datensätze (alias named parameters) für Funktionsparameter verwendet.

So einfache mathematische Funktionen in meinem Make glauben Sprache wäre:

add { left : num, right : num } = ... 
minus { left : num, right : num } = .. 

Sie in jedem Datensatz auf diese Funktionen übergeben können, solange sie diese beiden genannten Parameter haben (sie können mehr haben nur „links“ und rechts").

Wenn sie nur einen der genannten Parameter haben erstellt es eine neue Funktion:

minus5 :: { left : num } -> num 
minus5 = minus { right : 5 } 

ich ausleihen einige Notation von Haskell für oben.

Hat jemand eine Sprache gesehen, die das tut?

+0

@Ken Bloom ich sehen kann, wie mit dem Begriff „Teil Funktionsvervollständigung "ist mehrdeutig. Ich meinte eigentlich "Partial Application" und hatte eine Art kognitive Dissonanz und verwendete den oben genannten Begriff. Danke, dass du das korrigiert hast. –

Antwort

4

OCaml hat Parameter genannt und currying erfolgt automatisch (wenn auch manchmal Annotationstyp erforderlich, wenn mit optionalen Parametern zu tun), aber sie sind nicht fach vervielfacht:

Objective Caml version 3.11.2 

# let f ~x ~y = x + y;; 
val f : x:int -> y:int -> int = <fun> 
# f ~y:5;; 
- : x:int -> int = <fun> 
# let g = f ~y:5;; 
val g : x:int -> int = <fun> 
# g ~x:3;; 
- : int = 8 
+0

Ich habe OCaml schon einige Male benutzt und aus irgendeinem Grund dachte ich, dass du das nicht machen könntest, aber es sieht so aus, als ob ich falsch liege. Ich frage mich, ob F # das gleiche tun kann? -Danke –

+0

F # unterstützt keine benannten Parameter – ygrek

+0

Ich denke, es ist nur für Object-Konstruktoren, die Sie benannte Parameter verwenden können. C# 4.0 unterstützt benannte Parameter :) –

1

Sicher, Mathematica kann so etwas tun.