我需要在OCAML中使用cons制作一个@using

我需要在OCAML中使用cons制作一个@using,ocaml,Ocaml,我的老师说我们不能在程序中使用appends,所以我要为它编写自己的递归函数 以下是我到目前为止的情况: (我自己的附件功能) 如果a是一个包含多个元素的列表,我不知道如何将a的最后一个元素添加到b中,然后在第一部分调用appends,因为您只能删除包含以下内容的列表的第一个元素: 任何建议都将不胜感激从功能上考虑可能会有所帮助,即将代码视为附加两个列表在原则上意味着什么的定义。这与将代码视为要执行的一组操作相反。有时这会有所帮助,尤其是在用函数式语言编写代码时 因此,您的第一个案例是:如果a为

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

以下是我到目前为止的情况:

(我自己的附件功能)

如果a是一个包含多个元素的列表,我不知道如何将a的最后一个元素添加到b中,然后在第一部分调用appends,因为您只能删除包含以下内容的列表的第一个元素:
任何建议都将不胜感激

从功能上考虑可能会有所帮助,即将代码视为附加两个列表在原则上意味着什么的定义。这与将代码视为要执行的一组操作相反。有时这会有所帮助,尤其是在用函数式语言编写代码时

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

第二种情况是:如果
a
是一个包含一个元素的列表
hd
,则添加
a
b
的结果是一个列表,其中包含添加到
b
开头的
hd

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

因此,这里有一个建议的定义:如果
a
是一个列表,其头部是
hd
,尾部是
tl
,那么添加
a
b
的结果是一个列表,其头部是
hd
,尾部是
tl
,附加到
b


(事实上,这会泄露整个过程。我希望这不会破坏您的练习。)

除此之外,它还有助于了解所有相关变量的类型以及函数的目标
appends
是一个函数,它附加两个列表
a
b
,并返回一个列表
hd
是列表
a
的头项,
tl
是尾部列表。案例1将一个空列表与一些列表
b
相结合。案例2将某个项目
hd
与一个列表
b
相结合。案例3应将一些项目
hd
与一些列表
tl
和另一个列表
b
结合起来。我们知道如何将项目与列表组合,但我们有两个列表。。。我们怎样才能把这两张单列成一张单子呢?
let rec appends a b = 
    match a with
    | [] -> b
    | hd::[]-> hd::b
    | hd::tl-> (what i need help on)
    ;;