Frage Verwenden von Data.Heap in Haskell oder Lesen von Haskell-Dokumenten für Anfänger


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.

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


8
2018-04-15 06:31


Ursprung


Antworten:


In der Regel Datenstrukturbibliotheken in Haskell bietet fromList Funktionen zum Konvertieren von einer Liste in diese Struktur. Data.Heap ist keine Ausnahme. Aber Sie werden einige verrückte Fehler bekommen, wenn Sie versuchen, 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 ist hier Mehrdeutiger Typ. Es gibt verschiedene Arten von Haufen, z.B. MaxHeap und MinHeap, die nicht aus dem Aufruf abgeleitet werden können fromList. Sie müssen Haskell mitteilen, welche Art von Heap Sie mit einem verwenden Unterschrift eingeben:

Prelude Data.Heap> Data.Heap.fromList [1,2,5,7] :: MinHeap Int
fromList [(1,()),(2,()),(5,()),(7,())]

Andere Konstruktoren, z.B. singleton, fromAscListusw. funktionieren ähnlich.

Sobald Sie den Heap erstellt haben, ist der Rest einfach, z. Einfügen eines Elements in einen Heap

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 den oberen Teil des Heaps zu lesen

Prelude Data.Heap> heap
fromList [(1,()),(2,()),(5,()),(7,())]
Prelude Data.Heap> viewHead heap
Just 1

etc.


13
2018-04-15 06:59