8

De nombreux langages de programmation fonctionnels prennent en charge curried parameters. Pour prendre en charge les fonctions de correction, les paramètres de la fonction sont essentiellement un tuple dans lequel le dernier paramètre peut être omis pour créer une nouvelle fonction nécessitant un tuple plus petit.Existe-t-il un langage de programmation qui exécute des erreurs lorsque les paramètres nommés sont omis?

Je pense à concevoir un langage qui utilise toujours des enregistrements (aka named parameters) pour les paramètres de fonction.

Ainsi les fonctions mathématiques simples dans mon Imaginaire langue serait:

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

Vous pouvez passer dans tout dossier à ces fonctions tant qu'ils ont ces deux paramètres nommés (ils peuvent avoir plus juste « gauche » et "juste").

Si elles ont un seul paramètre nommé, il crée une nouvelle fonction:

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

J'emprunte une partie de la notation de haskell pour ci-dessus.

Est-ce que quelqu'un a vu une langue qui fait cela?

+0

@Ken Bloom Je peux voir comment utiliser le terme « partiel Fonction Completion "est ambigu. En fait, je voulais dire «application partielle» et avait une sorte de dissonance cognitive et utilisé le terme susmentionné. Merci d'avoir corrigé cela. –

Répondre

4

OCaml a nommé paramètres et curryfication est automatique (bien que parfois annotation de type est nécessaire lorsque le traitement avec des paramètres facultatifs), mais ils ne sont pas uplées:

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

J'ai utilisé OCaml plusieurs fois depuis longtemps et pour une raison ou une autre, je pensais que vous ne pouviez pas faire ça mais j'ai l'air de me tromper. Je me demande si F # peut faire la même chose? -Merci –

+0

F # ne prend pas en charge les paramètres nommés – ygrek

+0

Je suppose que c'est uniquement pour les constructeurs d'objets que vous pouvez utiliser les paramètres nommés. C# 4.0 prendra en charge les paramètres nommés :) –

1

Bien sûr, Mathematica peut faire ce genre de chose.