我想将函数met_devant_et_acc
变成一个尾递归函数,但我不知道如何重写它。 met_devant_et_acc l h
应该返回一个列表,其中包含列表l
的所有列表以及所有这些列表中的元素h
作为第一个元素。尾递归Ocaml程序
例如:met_devant_et_acc [ [1;2] ; [3;4] ]
是[ [9;1;2] ; [9;3;4] ; [1;2] ; [3;4] ]
let rec met_devant_et_acc l h = match l with
| [] -> [[]]
| a::t -> (met_devant h l) @ l;;
功能met_devant
放元素h
在每个列表的头列表l
例如:met_devant h [ [ ]; ['x';'e']]
回报[ ['h'] ; ['h';'x';'e'] ]
这里的代码met_devant
let rec met_devant h l = match l with
| [] -> l
| a::b -> List.map (ajoute h) l;;
功能ajoute
添加元素h
到列表l
let ajoute t l = match l with
| [] -> l
| a::b -> t::l;;
你解释呢,但是不知道met_devant_et_acc应该什么met_devant来实现的,也不知道为什么要让它尾递归。 –
您正在显示'met_devant_et_acc'的代码,其中不包含递归调用。如果你需要'met_devant'的帮助,你应该显示该函数的代码,并解释为什么它看起来没有工作。 –
我刚刚重新编辑我的文章(再次)。对不起,我是该网站的新成员,我需要一点时间才能解决,但感谢您帮助我这样做。 – TheScientist