我正在尝试按如下方式实现自己的列表模块:
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个参数”
答案 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)
。