1

こんにちは、誰かがタイプが以下に概説されている理由を説明してもらえますか? int でなければならないことは理解していますx+y+zが、引数の数 (つまり->) は私には恣意的に見えるからです。

let f x y z = x+y+z in f 1 2 3      // int
let f x y z = x+y+z in f 1 2        // int -> int
let f x y z = x+y+z in f            // int -> int -> int -> int

ありがとう!

4

2 に答える 2

2

valtronの答えを少し拡張します。の型を理解すれば、すべて簡単ですf。valtron が言うように、その型はint -> int -> int -> int. 基本的に、これは を受け取り、 型のint関数を返す関数の型int -> int -> intです。したがって、 to だけを渡す場合1(fこの例では行いません)、 type の何かが返されますint -> int -> int

同様に、intこの返された関数に を渡すと、タイプ の関数が返されますint -> int。これはあなたの例で行うことです:f 1 2まさにこれを行います: に渡し1f次に返す2関数に渡しfます。int -> intトップレベルで示されているように、この 2 番目の関数呼び出しは type の何かを返します。

同様に、後に 3 つの値を指定するとf、 type の値が返されますint。これが最初の例で起こっていることです。

于 2013-03-22T06:12:30.717 に答える
1

のタイプはf、定義したとおり、ですint -> int -> int -> int。あなたが提供する各引数は、カリー化のために式のタイプを削り取りますfintたとえば、f 1 2isはint -> int、intを受け取り、intを返す関数です。これは、とがとでカレーされてxいるため、パラメータではなくなったためです。y12

于 2013-03-22T06:03:52.393 に答える