ocaml的从列表中删除元素

问题描述 投票:0回答:1

我想从列表中删除特定元素(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-matching ocaml
1个回答
0
投票

match没有做什么你认为:

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

这里的x是由一个标识符(名称)的图案。这种模式的匹配所有可能的值,并结合名义值。

所以,你的模式匹配所有的时间,因此您的列表是空的。

你不能用一个模式来匹配像x变量值。你只能比对像3或无固定值。

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

© www.soinside.com 2019 - 2024. All rights reserved.