微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Ocaml 中的列表列表中删除重复项?

如何解决从 Ocaml 中的列表列表中删除重复项?

我是 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]] 

我做错了什么?

解决方法

以下是我在您所谓的失败案例上运行您的代码时得到的结果:

# sort_and_remove_duplicates [[3;1;3]; [4]; [1;2;3]];;
- : int list list = [[1; 2; 3]; [3; 1; 3]; [4]]

这对我来说似乎是正确的答案。输入列表中没有重复项,因此输出列表相同(排序除外)。

您对这个输入期望什么答案?

(作为旁注,您的代码看起来非常好,至少对于我认为它应该做的事情。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。