8

Muchos lenguajes de programación funcionales tienen soporte para curried parameters. Para soportar funciones de currying, los parámetros de la función son esencialmente una tupla donde el último parámetro se puede omitir haciendo una nueva función que requiera una tupla más pequeña.¿Hay un lenguaje de programación que realiza currying cuando se omiten los parámetros nombrados?

Estoy pensando en diseñar un lenguaje que siempre use registros (también conocido como named parameters) para los parámetros de la función.

funciones matemáticas lo tanto simples en mi maquillaje creen idioma sería:

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

Puede pasar en cualquier registro de esas funciones, siempre que tienen esos dos parámetros con nombre (que puede tener más justo "izquierda" y "correcto").

Si sólo tienen un parámetro llamado de la que crea una nueva función:

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

que pedir prestado algo de la notación de Haskell por encima.

¿Alguien ha visto un idioma que hace esto?

+0

@Ken Bloom me puede ver cómo el uso del término "parcial La finalización de la función "es ambigua. En realidad, quise decir "Aplicación parcial" y tuve algún tipo de disonancia cognitiva y usé el término antes mencionado. Gracias por corregir eso. –

Respuesta

4

OCaml ha nombrado parámetros de pellejo es automática (aunque a veces tipo de anotación que se requiere cuando se trata de parámetros opcionales), pero no se tupled:

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

He usado OCaml un montón de veces durante mucho tiempo y por alguna razón pensé que no podrías hacer eso, pero parece que estoy equivocado. Me pregunto si F # puede hacer lo mismo. -Gracias –

+0

F # no admite los parámetros con nombre – ygrek

+0

Supongo que es solo para los constructores de Objetos que puede usar parámetros con nombre. C# 4.0 admitirá parámetros con nombre :) –

1

Sure, Mathematica puede hacer ese tipo de cosas.

Cuestiones relacionadas