无法理解OCaml代码

时间:2015-01-26 04:41:28

标签: ocaml

我需要修改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.revlist.mem,如果某个元素在列表中,则返回true。有人可以向我解释一下这个函数的流程是如何工作的,所以我可以开始写一个解决方案了。

1 个答案:

答案 0 :(得分:1)

这条线令人困惑,因为它缩进不正确,或者我会声称。适当的缩进看起来像这样:

    let seen' = failwith "to be written" in
    let rest' = failwith "to be written" in 
    helper (seen',rest') 

它的含义是:为seen计算一个新值,为rest计算一个新值,然后使用这两个新值递归调用自己。