我已将自定义列表类型定义为家庭作业的一部分。
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 *)
我无法使用列表模块,因此我无法使用::
或@
。
答案 0 :(得分:8)
我想我的评论过于冗长,不能仅仅作为评论。我真的不想回答,我只想提示。否则就会失去目的。
重复我的提示:
一个。第二个参数在结果中将保持不变,因此您可以 花时间担心第一个参数。
湾您首先需要知道如何将某些内容附加到空列表中。即,你需要 知道第一个参数为空时该怎么做。
℃。接下来,您需要知道如何将非空案例分解为较小的附加内容 问题
如果你不知道如何创建一个项目,那么你可以先编写一个函数来获取(比方说)一个整数和一个整数列表,然后返回一个前面带整数的新列表。这是一个函数,它接受一个整数并返回一个只包含那个整数的列表:
let list1 k =
Item (k, Empty)
考虑到这一点的一种方法是,每次Item
出现在您的代码中时,您都会创建一个新项目。 Item
被称为构造函数,因为它构造了一个项目。
我希望这会有所帮助。
答案 1 :(得分:2)
您的结构是一个列表,因此您应该首先定义一个值为nil
的空列表,以及一个函数cons head tail
,它将head
元素添加到前面。列表tail
。
另一个建议:有时候,通过一个简单的例子,尝试手动手动,即在你自己做的简单操作中分解你想要做的事情,这有很大帮助。然后,您可以概括并编写代码......