List1中的OCaml元素,但List2中没有

时间:2014-02-25 17:57:46

标签: ocaml

我有代码:

let rec subtract list1 list2 =  
    match list2 with   
    | [] -> list1  
    | h::t -> List.filter (fun x -> List.mem x list1) list2;;  

我不想输出两个列表中出现的元素,而是想要list1中的ARE但不在list2中的元素。基本上是List.mem的反转版本。

例如,如果我输入lists of [1;2;3;4] and [1;2;3],则[4]应为输出

有关如何执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您当前的代码返回list2的过滤版本,这可能不对。您肯定想要返回list1的过滤版本。所以你的电话应该看起来像这样:

List.filter (fun x -> blah blah) list1

值得注意的是,考虑到你正在调用的函数,你并不需要将list2分解为其部分(匹配)。这些功能已经能够了解它。

逻辑上反转函数并不困难,即计算反布尔结果。 not运算符执行此操作。

(显然我不想为你编写代码。)