尝试在OCaml中使用match语句来编写一个检查元素是否在列表中的函数

时间:2018-01-27 16:00:06

标签: recursion ocaml

我是OCaml的新手,并努力与比赛合作。我想编写一个带有列表和值的函数,然后如果值在该列表中则返回true,否则返回false。这是我的想法,但我正在努力让它发挥作用。

    let rec contains xs x =
      match xs with
      | [] -> false
      | z :: zs ->
        match x with
        | z -> true
        | _ -> contains zs x

1 个答案:

答案 0 :(得分:3)

当您使用标识符作为模式时,您将匹配的值绑定到该标识符。即

match x with
| z -> true

会将x的值绑定到名称z。您还会收到有关z_分支未使用的警告。

你也不需要第二次模式匹配,因为它可以折叠成第一种:

let rec contains xs x =
  match xs with
  | [] -> false
  | z :: _ when z = x -> true
  | _ :: zs -> contains zs x