2012-03-26 129 views
0

我實現使用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]]

我不確定從哪裏開始,誰能給我一些建議?謝謝

+0

只是一個評論:List.flatten只是平坦的頂級。它不會「變得更深」。實際上你可以從參數化中弄清楚這一點。它具有''列表列表 - >'列表',因此不能在深層列表結構中查看''a'類型。 – 2012-03-26 21:14:31

回答

6

我沒有看到List.flatten和你的功能之間的區別。

要回答你的問題:像往常一樣名單,去想想基本情況:

  • 當您連接東西的空列表你會怎麼做?
  • 當你將某個非空列表(頭部和尾部)與某些東西連接起來時,你會做什麼?

裹一切都變成一個模式匹配,煮了幾個小時,這樣做了:-)

2

托馬斯給了絕好的建議。您的基本操作將是將一個列表追加到另一個列表。首先將這個函數作爲一個單獨的函數寫出可能會有所幫助。它會是這個樣子:

let rec myappend a b = 
    match a with 
    | [] -> (* Empty list prefixed to b (easy case) *) 
    | ahead :: atail -> (* Recursive case *) 

武裝用自己的附加功能,你可以進行遞歸 的另一個層面追加所有頂級名單托馬斯建議。