OCaml初学者需要帮助:出了什么问题?

Jun*_*unz -1 ocaml

码:

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

错误信息:

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

dan*_*ben 8

我认为问题是你试图将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)

;;
Run Code Online (Sandbox Code Playgroud)


Rém*_*émi 7

你不能混合使用if和match,你必须使用if之后的模式,如已经提出的那样,或者使用保护模式,如:

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

另请注意,ocaml是curry,并且通常不会在函数的参数周围加上括号