2010-04-15 7 views
7

Ich versuche, Haskells Data.Heap Modul zu verwenden, aber ich bin nicht in der Lage, es sogar mit ganzen Zahlen zu verwenden. Der einzige Haufen, den ich benutzen konnte, ist "leer", der keine Argumente benötigt.Verwenden von Data.Heap in Haskell oder Lesen von Haskell-Dokumenten für einen Anfänger

Später werde ich herausfinden, wie ich meine Bedürfnisse in die Tat umsetzen kann, aber im Moment wäre ich froh, wenn ich es sogar mit Zahlen testen könnte.

+0

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? –

Antwort

12

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.

+0

Danke. Genau das habe ich gesucht. Ich konnte so weit kommen, die Typfehler zu bekommen, aber ich konnte nicht herausfinden, wie ich sie loswerden sollte. Nochmals vielen Dank – Masse

Verwandte Themen