10

関数型プログラミング言語の多くは、カリー化されたパラメーターをサポートしています。カリー化関数をサポートするために、関数へのパラメーターは本質的にタプルであり、最後のパラメーターを省略して、より小さなタプルを必要とする新しい関数を作成できます。

関数パラメーターに常にレコード (名前付きパラメーター) を使用する言語を設計することを考えています。

したがって、私の偽物の言語の単純な数学関数は次のようになります。

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

これらの 2 つの名前付きパラメーターがある限り、これらの関数に任意のレコードを渡すことができます (「左」と「右」だけを使用することもできます)。

名前付きパラメーターが 1 つしかない場合は、新しい関数が作成されます。

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

上記の Haskell の表記の一部をお借りしています

これを行う言語を見た人はいますか?

4

2 に答える 2

5

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
于 2010-06-10T16:37:08.530 に答える
1

確かに、Mathematicaはそのようなことを行うことができます。

于 2010-06-10T13:59:16.923 に答える