Есть ли язык программирования, который выполняет каррирование, когда именованные параметры опущены? - PullRequest
9 голосов
/ 10 июня 2010

Многие функциональные языки программирования поддерживают параметры карри . Для поддержки функций каррирования параметры функции по сути являются кортежем, где последний параметр может быть опущен, создавая новую функцию, требующую меньшего кортежа.

Я думаю о разработке языка, который всегда использует записи (иначе называемые именованные параметры ) для параметров функции.

Таким образом, простые математические функции в моем воображаемом языке будут:

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

Вы можете передать любую запись этим функциям, если у них есть эти два именованных параметра (они могут иметь больше только «left» и «right»).

Если у них есть только один из названных параметров, создается новая функция:

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

Я заимствую некоторые из обозначений Haskell для выше .

Кто-нибудь видел язык, который это делает?

Ответы [ 2 ]

4 голосов
/ 10 июня 2010

У OCaml есть именованные параметры, и каррирование выполняется автоматически (хотя иногда требуется аннотация типа при работе с необязательными параметрами), но они не задаются:

    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
1 голос
/ 10 июня 2010

Конечно, Mathematica может делать такие вещи.

...