OCaml - 反转列表

时间:2014-03-06 10:04:13

标签: list ocaml

我正在尝试按如下方式实现自己的列表模块:

type 'a my_list =
    | Item of ('a * 'a my_list)
    | Empty

我已经实现了几个函数,现在我正在尝试为我的模块创建一个列表反转函数,如下所示:

let rec rev = function
    | Empty             -> (*return reversed list*)
    | Item(i, remnant)  -> (*recursive call to rev*)

此外,我不应该使用列表运算符,例如'::','[]'和'@'。

编辑,我尝试了什么:

let rec rev_append l1 l2 = match l1 with
    | Empty             -> l2
    | Item(i, remnant)  -> rev_append remnant Item(i, l2)

let rev l = rev_append l Empty;;

但这不起作用,传递给递归调用的第二个参数有一个错误:“Item(i,l2)”错误是“构造函数Item需要1个参数,但此处应用于0个参数”

1 个答案:

答案 0 :(得分:1)

括号男!

let rec rev_append l1 l2 = match l1 with
    | Empty             -> l2
    | Item(i, remnant)  -> rev_append remnant (Item (i, l2))

编译器理解rev_append传递了三个参数,即remnant Item(i, l2)