我正在尝试从列表中删除给定元素(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]
它返回空列表[]。
答案 0 :(得分:0)
这个match
并没有按照您的想法做:
match var with
| x -> remove x tail
| _ -> var :: (remove x tail)
这里的x
是由标识符(名称)组成的模式。这种模式会匹配所有可能的值,并将名称绑定到该值。
因此您的模式一直都在匹配,因此您的列表为空。
您不能使用模式与x
之类的变量值进行匹配。您只能与3或None之类的固定值进行匹配。
您应该使用if
语句来测试var
是否等于x
。