私はOCamlを学んでいます、そしてこれは私の最初のタイプされた言語です、それで私に我慢してみてください:
練習のために、私は関数「除算」を定義しようとしています。これは、2つのintを入力し、「inta」が「intb」に均等に分割されるかどうかを説明するブール値を出力します。私の最初の試みでは、次のようなものを書きました。
let divides? a b =
if a mod b = 0 then true
else false;;
タイプエラーが発生しました:
if a mod b = 0 then true
^
Error: This expression has type 'a option
but an expression was expected of type int
それで私はそれを好転させようとしました、そして私はこれをしました:
let divides? a b =
match a mod b with
0 -> true
|x -> false;;
これはあまり役に立ちませんでした:
Characters 26-27
match a mod b with
^
Error: This expression has type 'a option
but an expression was expected of type int
それから私はこれを試しました:
let divides? (a : int) (b : int) =
match a mod b with
0 -> true
|x -> false;;
これを引き出したのは:キャラクター14-15:分割しましょう?(a:int)(b:int)= ^エラー:このパターンはint型の値と一致しますが、オプションの'型の値と一致するパターンが予期されていました。
私は今、型システム全般に関して非常に混乱していてイライラしています。(私の最初の言語はSchemeでした、これは私の2番目です。)私がどこで間違っているのかを説明する助けとそれを修正する方法の提案は大歓迎です。