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

时间:2012-02-28 17:59:27

标签: list ocaml

我已将自定义列表类型定义为家庭作业的一部分。

type 'a myType =
  | Item of ('a * 'a myType)
  | Empty;;

我已经完成'长度',现在我需要'追加'功能。 我的长度函数:

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

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

let append list1 list2 = (* TODO *)

我无法使用列表模块,因此我无法使用::@

2 个答案:

答案 0 :(得分:8)

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

重复我的提示:

一个。第二个参数在结果中将保持不变,因此您可以     花时间担心第一个参数。

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

℃。接下来,您需要知道如何将非空案例分解为较小的附加内容     问题

如果你不知道如何创建一个项目,那么你可以先编写一个函数来获取(比方说)一个整数和一个整数列表,然后返回一个前面带整数的新列表。这是一个函数,它接受一个整数并返回一个只包含那个整数的列表:

let list1 k =
    Item (k, Empty)

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

我希望这会有所帮助。

答案 1 :(得分:2)

您的结构是一个列表,因此您应该首先定义一个值为nil的空列表,以及一个函数cons head tail,它将head元素添加到前面。列表tail

另一个建议:有时候,通过一个简单的例子,尝试手动手动,即在你自己做的简单操作中分解你想要做的事情,这有很大帮助。然后,您可以概括并编写代码......