我需要修改OCaml函数:
let removeDuplicates l =
let rec helper (seen,rest) =
match rest with
[] -> seen
| h::t ->
let seen' = failwith "to be written" in
let rest' = failwith "to be written" in
helper (seen',rest')
in
List.rev (helper ([],l));;
该函数需要获取列表l并返回列表,并删除所有重复项。 failwith "to be written"
部分是我应该编写代码的地方。我理解辅助函数是如何工作的,但我很难理解这部分助手(seen',rest')
。我不确定函数应该如何与这部分一起流动,或者当你将一堆in
包含在一起时它是如何工作的。我们被允许使用反转列表的List.rev
和list.mem
,如果某个元素在列表中,则返回true。有人可以向我解释一下这个函数的流程是如何工作的,所以我可以开始写一个解决方案了。
答案 0 :(得分:1)
这条线令人困惑,因为它缩进不正确,或者我会声称。适当的缩进看起来像这样:
let seen' = failwith "to be written" in
let rest' = failwith "to be written" in
helper (seen',rest')
它的含义是:为seen
计算一个新值,为rest
计算一个新值,然后使用这两个新值递归调用自己。