我已经定义了自定义列表类型作为部分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)
我不能使用列表模块,所以我不能使用::或@.
我想我的评论过于冗长,不能仅仅作为评论.我真的不想回答,我只想提示.否则就会失败.
重复我的提示:
一个.第二个参数在结果中显示不变,因此您可以花时间担心第一个参数.
湾 您首先需要知道如何将某些内容附加到空列表中.即,当第一个参数为Empty时,您需要知道该怎么做.
C.接下来,您需要知道如何将非空案例分解为较小的追加问题.
如果你不知道如何创建一个项目,那么你可以先编写一个函数,它接受一个整数和一个整数列表,并返回一个前面带整数的新列表.这是一个函数,它接受一个整数并返回一个只包含那个整数的列表:
let list1 k =
Item (k, Empty)
Run Code Online (Sandbox Code Playgroud)
想到这一点的一种方法是,每次Item出现在您的代码中,您都会创建一个新项目. Item被称为构造函数,因为它构造了一个项目.
我希望这有帮助.