OCaml元素在列表1中,但不在列表2中

OCaml元素在列表1中,但不在列表2中,ocaml,Ocaml,我有密码: let rec subtract list1 list2 = match list2 with | [] -> list1 | h::t -> List.filter (fun x -> List.mem x list1) list2;; 我不想输出两个列表中出现的元素,而是想要列表1中的元素,而不是列表2中的元素。基本上是List.mem的一种反向版本 例如,如果我输入[1;2;3;4]和[1;2;3]的列表,[4]应该

我有密码:

let rec subtract list1 list2 =  
    match list2 with   
    | [] -> list1  
    | h::t -> List.filter (fun x -> List.mem x list1) list2;;  
我不想输出两个列表中出现的元素,而是想要列表1中的元素,而不是列表2中的元素。基本上是
List.mem
的一种反向版本

例如,如果我输入[1;2;3;4]和[1;2;3]的列表,
[4]
应该是输出


有没有关于如何执行此操作的建议?

您当前的代码返回一个经过筛选的list2版本,这可能是错误的。当然,您希望返回list1的过滤版本。所以你的电话应该看起来更像这样:

List.filter (fun x -> blah blah) list1
还值得注意的是,考虑到您正在调用的函数,您实际上不需要将list2分解为多个部分(使用匹配项)。这些函数已经能够查看它的内部

从逻辑上反转一个函数一点也不难,也就是说,计算逆布尔结果。
not
操作员执行此操作


(显然,我并不是在为您编写代码。)

为了澄清,如果我输入[1;2;3;4]和[1;2;3]的列表,那么[4]应该是输出。谢谢如果您能提供任何指导,我们将不胜感激。您应该将此澄清编辑到问题中