在OCaml中编写一个列表附加函数

K1n*_*g0e 4 ocaml list

我已经定义了自定义列表类型作为部分fa家庭作业练习.

type 'a myType =
  | Item of ('a * 'a myType)
  | Empty;;
Run Code Online (Sandbox Code Playgroud)

我已经做了'长度',现在我需要'追加'功能.我的长度函数:

let length l =
  let rec _length n = function
    | Empty         -> n
    | Item(_, next) -> _length (n + 1) next
  in _length 0 l;;
Run Code Online (Sandbox Code Playgroud)

但我真的不知道如何制作追加功能.

let append list1 list2 = (* TODO *)
Run Code Online (Sandbox Code Playgroud)

我不能使用列表模块,所以我不能使用::@.

Jef*_*eld 8

我想我的评论过于冗长,不能仅仅作为评论.我真的不想回答,我只想提示.否则就会失败.

重复我的提示:

一个.第二个参数在结果中显示不变,因此您可以花时间担心第一个参数.

湾 您首先需要知道如何将某些内容附加到空列表中.即,当第一个参数为Empty时,您需要知道该怎么做.

C.接下来,您需要知道如何将非空案例分解为较小的追加问题.

如果你不知道如何创建一个项目,那么你可以先编写一个函数,它接受一个整数和一个整数列表,并返回一个前面带整数的新列表.这是一个函数,它接受一个整数并返回一个只包含那个整数的列表:

let list1 k =
    Item (k, Empty)
Run Code Online (Sandbox Code Playgroud)

想到这一点的一种方法是,每次Item出现在您的代码中,您都会创建一个新项目. Item被称为构造函数,因为它构造了一个项目.

我希望这有帮助.