I am new in OCaml and I wrote some code to get the n element of a list
let rec n_elem l n = match n with
| 0 -> match l with
| h::_ -> h
| _ -> failwith "erorr with empty list"
| _ -> match l with
| h::t -> n_elem t (n-1)
| _ -> failwith "erorr with empty list"
;;
When I run it using ocaml
interpreter, an warning generate as:
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
1
Warning 11: this match case is unused.
and when I run it with:
Printf.printf "%s\n" (n_elem ["a";"b";"c";"d"] 1);;
it generate match_failure...
Could anyone give me some help?
This is basically a precedence problem. The second
_
match case is part of the secondmatch
expression. You can use begin/end to keep them separate: