使用OCaml在两个列表中查找没有重复项的公共元素
我试图在OCaml中实现rec函数,但我不知道如何过滤结果列表中重复的公共元素,以下是我的实现:使用OCaml在两个列表中查找没有重复项的公共元素,ocaml,Ocaml,我试图在OCaml中实现rec函数,但我不知道如何过滤结果列表中重复的公共元素,以下是我的实现: let rec common twolists = match twolists with | (x, y) -> match x with | [] -> [] | s :: ss -> if memberof (s, y) then s :: com
let rec common twolists =
match twolists with
| (x, y) ->
match x with
| [] -> []
| s :: ss ->
if memberof (s, y) then
s :: common (ss, y)
else
common (ss, y)
;;
我在两个列表中找到了所有的公共元素,但我不知道如何在没有任何重复项的情况下进行操作。一个想法是替换此表达式:
s :: common (ss, y)
有点复杂
如果s
已经是common(ss,y)
的成员,则不希望再次添加它。因此,根据s
是否已经存在,可以用两种情况替换此表达式
为此,您可能需要使用let
:
let rest = common (ss, y) in
. . .
(请注意,如果这是列表可能变长的生产代码,您可能希望避免重复调用memberof
。您可能最终使用树,即集合。然后结果是一个完全直接的集合交集。)