我正在嘗試使用Haskells Data.Heap模塊,但我甚至無法將它與整數一起使用。我唯一能夠使用的堆是「空」,它沒有任何爭論。在Haskell中使用Data.Heap,或者爲初學者閱讀Haskell文檔
後來我會弄清楚如何爲我的需求提供實例,但現在如果我甚至能夠用數字測試它,我會很高興。
我正在嘗試使用Haskells Data.Heap模塊,但我甚至無法將它與整數一起使用。我唯一能夠使用的堆是「空」,它沒有任何爭論。在Haskell中使用Data.Heap,或者爲初學者閱讀Haskell文檔
後來我會弄清楚如何爲我的需求提供實例,但現在如果我甚至能夠用數字測試它,我會很高興。
通常Haskell中的數據結構庫提供了fromList
函數來將列表轉換爲該結構。 Data.Heap也不例外。但是,試圖使用它時,你會得到一些瘋狂的錯誤:
Prelude Data.Heap> Data.Heap.fromList [1,2,5,7]
<interactive>:1:0:
Ambiguous type variables `t', `pol' in the constraint:
`HeapItem pol t'
arising from a use of `fromList' at <interactive>:1:0-27
Probable fix: add a type signature that fixes these type variable(s)
....
這主要這裏的一點是曖昧類型。有幾種類型的堆,例如MaxHeap和MinHeap,這不能通過調用fromList
來推斷。你需要告訴哈斯克爾你與類型簽名使用的是哪種堆:
Prelude Data.Heap> Data.Heap.fromList [1,2,5,7] :: MinHeap Int
fromList [(1,()),(2,()),(5,()),(7,())]
其他的構造如singleton
,fromAscList
等的操作類似。
一旦你建立了堆,其餘的很容易,例如,插入一個項目一個堆
Prelude Data.Heap> let heap = Data.Heap.fromList [1,2,5,7] :: MinHeap Int
Prelude Data.Heap> heap
fromList [(1,()),(2,()),(5,()),(7,())]
Prelude Data.Heap> Data.Heap.insert 3 heap
fromList [(1,()),(3,()),(2,()),(5,()),(7,())]
要讀取堆
Prelude Data.Heap> heap
fromList [(1,()),(2,()),(5,()),(7,())]
Prelude Data.Heap> viewHead heap
Just 1
等
謝謝。這正是我所期待的。我能夠獲得類型錯誤,但無法弄清楚如何擺脫它們。 再次,謝謝 – Masse 2010-04-15 07:13:33
你的問題是頂?你能否提供迄今爲止的代碼,所以SO用戶可以提出改進建議? – 2010-04-15 07:05:58