Новичку OCaml нужна помощь: что не так? - PullRequest
0 голосов
/ 18 марта 2010

Код:

let rec get_val (x, n) = match x with
    [] -> -1
  | if (n=0) then (h::_) -> h 
    else (_::t) -> get_val(t, n-1)
;;

Сообщение об ошибке:

Characters 55-57:
| if (n=0) then (h::_) -> h 
  ^^
Error: Syntax error

Ответы [ 2 ]

8 голосов
/ 18 марта 2010

Мне кажется, проблема в том, что вы пытаетесь поместить выражение if в оператор сопоставления с образцом. Левая сторона каждого -> должна соответствовать действительному шаблону для x.

Попробуйте это:

let rec get_val (x, n) = match x with

    [] -> -1

  | h::t -> if (n=0) then h 
                     else get_val(t, n-1)

;;
7 голосов
/ 18 марта 2010

Вы не можете смешивать if и match так, вы должны либо использовать if после паттерна, как уже предлагалось, либо использовать охраняемую скороговорку как в:

let rec get_val x n = 
  match x with
    [] -> -1
  | h::_ when n=0 -> h 
  | _::t ->  get_val t (n-1)
;;

обратите внимание также, что ocaml каррируется, и вы обычно не ставите скобки вокруг аргументов функции

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