2013-02-23 85 views
0

如何將列表v1 :: v2 :: vn :: []轉換爲隊列? 這是我迄今爲止所寫的全部內容: -將列表轉換爲隊列

 let fromList (l:'a list) : 'a queue = 
     let queue = create() in 
     let rec loop (z: 'a list) (q: 'a queue) : 'a queue = 
      begin match z with 
      | [] -> None 
      | hd :: tl -> 
       end 

謝謝!

+1

這裏沒有足夠的信息來合理回答。你的隊列類型是什麼樣的?什麼功能可用於操縱你的隊列? – 2013-02-23 19:05:14

+0

鍵入'a qnode = {v:'a; mutable next:'a qnode option} type'a queue = {mutable head:'qnode option; mutable tail:'a qnode option} – user1679089 2013-02-23 19:19:50

+0

和我的函數是: – user1679089 2013-02-23 19:20:27

回答

1

好的,你有一個可變的隊列類型。

命令式處理列表的慣用方式是List.iter

它看起來像我打算寫自己的遞歸函數loop做到這一點,而不是(可能是因爲這是家庭作業)。第一個意見是,在寫這樣的命令式代碼時,要做的地方是要返回()unit類型的唯一值)而不是None。您的loop函數將始終返回(),因爲它通過修改隊列(勢在必行)而工作。

你必須回答的遞歸(因爲我總是指出)的問題是:

  • 你有什麼需要的空單怎麼辦?

  • 如果列表不是空的,你需要怎麼做它的頭部和尾部?

當這樣問,答案似乎很明顯。但是如果不是的話,一個可能的提示是你想調用你已經知道的兩個函數,一個用於頭部,另一個用於列表的尾部。

+1

不錯。我懶得把它變成一個謎語。 – gasche 2013-02-23 20:04:15

+0

我必須使用** enq **嗎? – user1679089 2013-02-23 20:08:07

+0

我應該使用** enq **嗎? @gasche非常感謝! – user1679089 2013-02-23 20:20:55