Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List OCaml-反转列表_List_Ocaml - Fatal编程技术网

List OCaml-反转列表

List OCaml-反转列表,list,ocaml,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

我正试图实现我自己的列表模块,如下所示:

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)”错误是“构造函数项需要1个参数,但在这里应用于0个参数”。

括号man

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

编译器理解,
rev\u append
传递了三个参数,即
rements
(i,l2)

不使用
构建列表有什么诀窍吗?似乎这对列表的定义至关重要。我编辑了我的帖子,向你展示了我的尝试。