パターンマッチングについて学ぶために、私は現在Ocamlの1から3までの数字を生成してstdoutに書き込もうとしています。乱数ジェネレータとパターンマッチング - OCaml
これは私がこれまでに書いたもの(空の引数を持つ関数)である:
let random_compchoice() = match Random.int 3 with
| 1 -> "1"
| 2 -> "2"
| 3 -> "3"
| _ -> "Error"
;;
Printf.printf "The option is %s\n" random_compchoice;;
は、しかし、これはトリガー:
**Error**: This expression has type unit -> string
but an expression was expected of type string
しかし、私はこれを行う場合:
let random_compchoice = match Random.int 3 with
| 1 -> "1"
| 2 -> "2"
| 3 -> "3"
| _ -> "Error"
;;
Printf.printf "The option is %s\n" random_compchoice;;
をこれはコンパイルされますが、デフォルトは常に
The option is Error
私はそこに行方不明の何かのアイデア?前もって感謝します。 (最初の 'case'として1で始まり、0ではないことも確かではありません)。あなたの最初の例で
最後の質問に答えるために、任意のパターンを設定することができます。彼らはどこにいても実際には「始まっていない」。 OCamlはパターンがすべての可能なケースをカバーしていないかどうか警告します。一方、 'Random.int 3'は0,1、または2を返します。 –
...マッチを網羅するために洗練されたタイプが必要なので、それまではcatch-allが必要です。 – nlucaroni