我有代码:
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]
应为输出
有关如何执行此操作的任何建议吗?
答案 0 :(得分:2)
您当前的代码返回list2的过滤版本,这可能不对。您肯定想要返回list1的过滤版本。所以你的电话应该看起来像这样:
List.filter (fun x -> blah blah) list1
值得注意的是,考虑到你正在调用的函数,你并不需要将list2分解为其部分(匹配)。这些功能已经能够了解它。
逻辑上反转函数并不困难,即计算反布尔结果。 not
运算符执行此操作。
(显然我不想为你编写代码。)