Ocaml Это '(' может не иметь себе равных - PullRequest
0 голосов
/ 09 ноября 2018

новичок в Ocaml. Я понятия не имею, что здесь происходит, и я пытался решить это, возможно, в течение 2 часов.

Вот код:

let hailstorm n = 
    match n with
    | (mod n 2 == 0) -> (n/2)
    | (mod n 2 == 1) -> (3*n+1);;

Когда я пытаюсь скомпилировать, он говорит:

File "./x.ml", line 3, characters 11-12:Error: Syntax error: ')' expected
File "./x.ml", line 3, characters 6-7:
Error: This '(' might be unmatched

1 Ответ

0 голосов
/ 09 ноября 2018

Ключевое слово mod является двоичным оператором (например, lsl, lsr, asr, land, lor, lxor и or).Например,

let zero = 2 mod 2

Двоичный оператор можно преобразовать в стандартную функцию, заключив их в скобки,

let zero = (mod) 2 2

, поэтому анализатор ожидает закрывающую скобку после (mod.

Тогда сопоставление с образцом неверно, поскольку n mod 2 == 0 является выражением, а не образцом (и вам следует использовать структурное равенство =, а не физическое равенство ==):

let f n = match n mod 2 with
| 0 -> ...
| _ -> ...

или

let f n = match n mod 2 = 0 with
| true -> ...
| false -> ...

, что, вероятно, проще с if ... then ... else ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...