Существует ли язык программирования, который выполняет приправление карри, когда именованные параметры опущены?

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

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

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

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

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

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

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

Я одалживаю часть нотации haskell для вышеупомянутого.

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

9
задан Ken Bloom 10 June 2010 в 02:58
поделиться

2 ответа

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
4
ответ дан 3 November 2019 в 07:12
поделиться

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

1
ответ дан 3 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: