消除另一个列表中包含的列表元素

时间:2017-11-05 10:54:27

标签: list filter ocaml

我有这个代码来消除列表中包含的元素:

$qrtaskdeviceid[0]->id

现在我使用此函数来帮助以下代码消除另一个列表中包含的列表元素:

let remove_all x l = 
    let rec aux l acc = match l with
        [] -> List.rev acc
        | h::t when h=x -> aux t acc
        | h::t -> aux t (h::acc)
    in aux l [];;

我打电话时的问题:

let leliminate l1 l2 = 
    let rec aux l1 l2 acc = match (l1,l2) with
        ([],[]) -> acc
        | (h1::t1, h2::t2) when h1=h2 -> aux t1 l2 (remove_all h1 acc)
        | (h1::t1, h2::t2) when h1!=h2 -> aux t1 t2 acc
        | (h1::t1, []) -> aux t1 l2 acc
    in aux l1 l2 l1;;

是当我期望[1; 4]时函数返回[1; 2; 3; 2; 4]。

1 个答案:

答案 0 :(得分:1)

使用标准库中的一些函数可以稍微简洁地编写您的函数:

let leliminate l1 l2 =
  List.filter (fun x -> not (List.mem x l2)) l1;;