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