首页 > 解决方案 > 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]

它返回空列表 []。

标签: pattern-matchingocaml

解决方案


match不是你想的那样:

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

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

所以你的模式一直在匹配,因此你的列表是空的。

您不能使用模式来匹配变量值,例如x. 您只能匹配固定值,例如 3 或 None。

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


推荐阅读