从 Ocaml 中的列表列表中删除重复项?
Posted
技术标签:
【中文标题】从 Ocaml 中的列表列表中删除重复项?【英文标题】:Removing duplicates from a list of lists in Ocaml? 【发布时间】:2021-07-01 20:24:42 【问题描述】:我是 Ocaml 的新手,我被分配仅使用 List 模块删除列表列表的所有重复项。这是我写的代码:
let sort_and_remove_duplicates l =
let sl = List.sort compare l in
let rec go l acc = match l with
| [] -> List.rev acc
| [x] -> List.rev (x::acc)
| (x1::x2::xs) ->
if x1 = x2
then go (x2::xs) acc
else go (x2::xs) (x1::acc)
in go sl []
这会通过空列表的情况,但对于其他情况则失败,例如:
[[3;1;3]; [4]; [1;2;3]]
我做错了什么?
【问题讨论】:
列表列表的重复是什么意思? 【参考方案1】:这是我在你所谓的失败案例上运行你的代码时得到的结果:
# sort_and_remove_duplicates [[3;1;3]; [4]; [1;2;3]];;
- : int list list = [[1; 2; 3]; [3; 1; 3]; [4]]
这对我来说似乎是正确的答案。输入列表中没有重复项,因此输出列表是相同的(排序除外)。
您对此输入的期望是什么?
(作为旁注,您的代码看起来非常好,至少对于我认为它应该做的事情。)
【讨论】:
以上是关于从 Ocaml 中的列表列表中删除重复项?的主要内容,如果未能解决你的问题,请参考以下文章