这个OCAML功能有什么问题?

时间:2015-02-17 01:42:19

标签: ocaml reverse cons

这是我的原始代码。

let rec reverse l =
   match l with 
   | [] -> []
   | (h::t) -> (reverse t) :: h

1 个答案:

答案 0 :(得分:2)

cons ::运算符将一个元素作为左手参数,将一个列表作为右手参数。在这里,你做相反的事情是行不通的。

在列表末尾的元素处添加元素的正确方法是使用列表连接:

let rec reverse l =
  match l with
  | [] -> []
  | h :: t -> (reverse t) @ [h]

但该代码并非最佳,您可能希望将其设为tail recursive