簡體   English   中英

展平OCaml中的列表列表

[英]Flattening a list of lists in OCaml

我正在使用Ocaml實現此hoemwork功能:

  • 不允許使用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]]

我不確定從哪里開始,有人可以給我一些建議嗎? 謝謝

我看不到List.flatten和您的函數之間的區別。

要回答您的問題:與列表一樣,請嘗試考慮基本情況:

  • 當您將一個空列表與某些內容連接在一起時,您會怎么做?
  • 將非空列表(帶有頭部和尾部)與某些東西連接在一起時,該怎么辦?

將所有內容包裝成圖案匹配,煮幾個小時,然后就完成了:-)

托馬斯給出了很好的建議。 您的基本操作是將一個列表追加到另一個列表。 首先將此功能編寫為單獨的功能可能會有所幫助。 它看起來像這樣:

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

有了自己的append函數,您可以執行另一級別的遞歸,以追加Thomas所建議的所有頂級列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM