最初の行に余分な「i」があると思います。これにより、fact2 は使用されない追加の引数を取ります。代わりに、次のように読む必要があります。
let fact2 =
「ループ 1」と書かれている最後の行は、部分適用と呼ばれることがよくあります。
Ocaml は通常、カリー化された関数を使用するため、別の考え方として、loop
実際には 1 つのパラメーターを受け取り、別のパラメーターを受け取って int を返す関数を返すというものがあります。
この特定のケースでは、 の型は、(loop 1)
を取り、を返すint -> int
ことを意味します。の型は、を受け取り、を返すことを意味します。は右結合であるため、より明示的に記述することもできます。int
int
loop
int -> int -> int
int
int -> int
int -> (int -> int)
->
他の質問に答えるために、accum
は に 1 を渡すことによって初期化されloop
ます。
カリー化の詳細については、http: //en.wikipedia.org/wiki/Curryingを参照してください。
そしてもちろん、他の人が示唆しているように別の「i」を追加することもできますが、他の人がそれを省略したときにまだ混乱するでしょう.
let f x y = ...
と同等であると考えるのに役立つかもしれませんlet f = fun x -> fun y -> ...
もちろんlet f x = g x
は と同じですがlet f = g
、前者g
は が関数の場合にのみ機能します。