Normalerweise Datenstrukturbibliotheken in Haskell bietet fromList
Funktionen, um von einer Liste zu dieser Struktur zu konvertieren. Data.Heap ist keine Ausnahme. Aber Sie werden ein paar verrückten Fehler beim Versuch, es zu benutzen:
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)
....
Dieser Hauptpunkt hier ist mehrdeutige Art. Es gibt verschiedene Arten von Haufen, z.B. MaxHeap und MinHeap, die nicht aus dem Aufruf von fromList
abgeleitet werden können. Sie müssen Haskell sagen, welche Art von Heap Sie mit einem Typ Signatur verwenden:
Prelude Data.Heap> Data.Heap.fromList [1,2,5,7] :: MinHeap Int
fromList [(1,()),(2,()),(5,()),(7,())]
Andere Konstrukteure z.B. singleton
, fromAscList
usw. funktionieren ähnlich.
Sobald Sie den Haufen erstellt haben, ist der Rest einfach, z. fügen Sie ein Element zu einem Haufen
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,())]
Um die Spitze des Haufens
Prelude Data.Heap> heap
fromList [(1,()),(2,()),(5,()),(7,())]
Prelude Data.Heap> viewHead heap
Just 1
usw.
Was ist Ihre Frage gelesen haben? Können Sie den Code, den Sie bisher haben, zur Verfügung stellen, damit SO-Benutzer Verbesserungen vorschlagen können? –