Recursion 尝试在OCaml中使用match语句来编写一个函数,该函数检查元素是否在列表中
我是OCaml的新手,正在努力处理比赛。我想写一个函数,它接受一个列表和一个值,如果该值在该列表中,则返回true;如果不在该列表中,则返回false。这是我的想法,但我正在努力让它发挥作用Recursion 尝试在OCaml中使用match语句来编写一个函数,该函数检查元素是否在列表中,recursion,ocaml,Recursion,Ocaml,我是OCaml的新手,正在努力处理比赛。我想写一个函数,它接受一个列表和一个值,如果该值在该列表中,则返回true;如果不在该列表中,则返回false。这是我的想法,但我正在努力让它发挥作用 let rec contains xs x = match xs with | [] -> false | z :: zs -> match x with | z -> true | _ ->
let rec contains xs x =
match xs with
| [] -> false
| z :: zs ->
match x with
| z -> true
| _ -> contains zs x
当您使用标识符作为模式时,您将把匹配的值绑定到该标识符。即
match x with
| z -> true
将x
的值绑定到名称z
。您还将收到一条关于z
和\ucode>分支未使用的警告
您也不需要第二个图案匹配,因为它可以折叠成第一个:
let rec contains xs x =
match xs with
| [] -> false
| z :: _ when z = x -> true
| _ :: zs -> contains zs x
谢谢我只使用了两个案例的模式匹配,所以我甚至没有意识到你可以有两个以上的案例。