2014-01-19 7 views
6

/複数の引数:私は得ることに保つOCamlのカリー化、私は簡単な関数持た

let rec ap x y = if x < 10 then 12 else ap((x-1) (y));; 

が、エラーは次のとおりです。私は今、2時間にわたって、この上で立ち往生してきた

Error: This expression has type int 
    This is not a function; it cannot be applied. 

、私はなぜこれがうまくいかないのか分からないのですか?

また、実際のocamlコードでは、この問題が発生するため、関数を単純化しました。これがカレー化と関係があるのか​​どうかは分かりませんが、誰かがなぜこのことが起こっているのか説明できますか?

+1

実際のエラーメッセージは、問題の正確な位置を示します。これは '(x-1)'です。 –

答えて

6

OCamlコンパイラは、((x-1)(y))に(x-1)〜(y)を適用しているとみなします。これは、「この式はint型です。これは関数ではなく、適用できません」というエラーが表示されます。

実際には、apは2つの引数を取るため、ap(x-1)(y)を記述する必要があります。

OCaml(または他のHindley-Milner派生言語:SML、Haskell)では、関数を適用してC言語のような別の目的を果たすために括弧は必要ないことに注意してください。

関連する問題