質問

この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>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top