我需要在OCAML中使用@使用cons

时间:2014-10-05 01:14:33

标签: ocaml

我的老师说我们不能在我们的程序中使用@,所以我要为它编写自己的递归函数。

这是我到目前为止所拥有的:

我自己的追加功能

let rec appends a b = 
    match a with
    | [] -> b
    | hd::[]-> hd::b
    | hd::tl-> (what i need help on)
    ;;

我不知道如果a是一个包含多个元素的列表,然后调用追加到第一部分,我只是不知道如何添加a的最后一个元素,因为你只能用::删除列表的第一个元素 任何建议将不胜感激

1 个答案:

答案 0 :(得分:2)

可能有所帮助的是在功能上进行更多思考,即将代码视为原则上附加两个列表的定义。这与将代码视为要执行的一组动作相反。有时这会有所帮助,尤其是在使用函数式语言进行编码时。

因此,您的第一个案例说明:如果a为空,则追加ab的结果只是b本身。

您的第二个案例说明:如果a是一个元素hd的列表,则追加ab的结果是一个由{{1}组成的列表添加到hd的开头。

您正在寻找适用于任何非空列表b的附加的一般定义。关键的见解是您的定义可以是递归的,即它可以使用您的a函数。

所以这是一个建议的定义:如果appends是一个头部为a且尾部为hd的列表,则追加tl和{{1}的结果}}是一个列表,其头部为a,其尾部为b附加到hd

(这实际上让整个事情消失了。我希望它不会破坏你的锻炼。)