Чтобы узнать о совпадении с образцом, я в настоящее время пытаюсь сгенерировать число от 1 до 3 в Ocaml и записать его в 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
Любые идеи о том, чего я там не вижу? Заранее спасибо. (Также не уверен, что можно начинать с 1 как первый «случай», а не 0).
Чтобы ответить на ваш последний вопрос, у вас могут быть любые шаблоны, которые вы хотите. Они на самом деле не «начинают» нигде. OCaml будет предупреждать, если шаблоны не охватывают все возможные случаи. С другой стороны, «Random.int 3» возвращает 0, 1 или 2. –
... и нам понадобится тип уточнения, чтобы сделать матч исчерпывающим, поэтому вам всегда понадобится этот ловушка до тех пор. – nlucaroni