Ocaml从清单中移除元素

时间:2019-02-05 02:54:03

标签: pattern-matching ocaml

我正在尝试从列表中删除给定元素(x)

let rec remove x list =
  match list with
  | [] -> []
  | var :: tail -> match var with
    | x -> remove x tail
    | _ -> var :: (remove x tail)
;;

这是我到目前为止所做的,但是当我尝试

remove 5 [1;2;3;4;5]

它返回空列表[]。

1 个答案:

答案 0 :(得分:0)

这个match并没有按照您的想法做:

match var with
    | x -> remove x tail
    | _ -> var :: (remove x tail)

这里的x是由标识符(名称)组成的模式。这种模式会匹配所有可能的值,并将名称绑定到该值。

因此您的模式一直都在匹配,因此您的列表为空。

您不能使用模式与x之类的变量值进行匹配。您只能与3或None之类的固定值进行匹配。

您应该使用if语句来测试var是否等于x