我想將函數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