我實現使用Ocaml程序編寫本hoemwork功能列表的列表:壓扁OCaml中
- 不準使用
List
模塊 - 函數的類型是
'a list list -> 'a list
- 函數返回組成的列表列表以x連接在一起(只是列表的頂級級聯是串聯的,不像List.flatten)
- 例如:
[[1,2,3],[45]] => [1,2,3,4,5]
和[[[1,2,3],[4,5]],[[6,7]]] => [[1,2,3],[4,5],[6,7]]
我不確定從哪裏開始,誰能給我一些建議?謝謝
我實現使用Ocaml程序編寫本hoemwork功能列表的列表:壓扁OCaml中
List
模塊'a list list -> 'a list
[[1,2,3],[45]] => [1,2,3,4,5]
和[[[1,2,3],[4,5]],[[6,7]]] => [[1,2,3],[4,5],[6,7]]
我不確定從哪裏開始,誰能給我一些建議?謝謝
我沒有看到List.flatten
和你的功能之間的區別。
要回答你的問題:像往常一樣名單,去想想基本情況:
裹一切都變成一個模式匹配,煮了幾個小時,這樣做了:-)
托馬斯給了絕好的建議。您的基本操作將是將一個列表追加到另一個列表。首先將這個函數作爲一個單獨的函數寫出可能會有所幫助。它會是這個樣子:
let rec myappend a b =
match a with
| [] -> (* Empty list prefixed to b (easy case) *)
| ahead :: atail -> (* Recursive case *)
武裝用自己的附加功能,你可以進行遞歸 的另一個層面追加所有頂級名單托馬斯建議。
只是一個評論:List.flatten只是平坦的頂級。它不會「變得更深」。實際上你可以從參數化中弄清楚這一點。它具有''列表列表 - >'列表',因此不能在深層列表結構中查看''a'類型。 – 2012-03-26 21:14:31