質問
このOCamlコードのスニペットを与える:
let rec range a b =
if a > b then []
else a :: range (a+1) b
;;
Replは、そのタイプが次のとおりであることを教えてくれます:
val range : int -> int -> int list = <fun>
次のような入力を与える
range 0 4;;
リストを返します:
- : int list = [0; 1; 2; 3; 4]
ただし、入力を提供
range -4 2;;
エラーを表示:
Characters 0-5:
range -4 1;;
^^^^^
This expression has type int -> int -> int list but is here used with type int.
これが私に伝えようとしていることは何ですか?
解決
入力すると、
range -4 2;;
-
は単項否定ではなく関数、中置関数であることを覚えておく必要があります。
単項否定を行うには、1)先行する-〜-4などの〜で署名するか、括弧を使用して、2つのことのいずれかを実行できます。
他のヒント
ラップする必要があることに気付いた
-4 in parenthesis
ie呼び出し:
range (-4) 0;;
与える:
- : int list = [-4; -3; -2; -1; 0]
他の誰かが同じ問題に遭遇した場合に備えて、この質問は残しておきます。
問題を要約すると、-
はトークン 4
の符号としてではなく、関数として解釈されます。
次を参照できます。詳細については、 OCaml言語の問題をご覧ください。 p>
所属していません StackOverflow