Das folgende Stück Code gibt den Fehler error: did not understand '#generality'
Legendes GNU Smalltalk Closure
pqueue := SortedCollection new.
freqtable keysAndValuesDo: [:key :value |
(value notNil and: [value > 0]) ifTrue: [
|newvalue|
newvalue := Leaf new: key count: value.
pqueue add: newvalue.
]
].
[pqueue size > 1] whileTrue:[
|first second new_internal newcount|
first := pqueue removeFirst.
second := pqueue removeFirst.
first_count := first count.
second_count := second count.
newcount := first_count + second_count.
new_internal := Tree new: nl count: newcount left: first right: second.
pqueue add: new_internal.
].
Die Inkonsistenz in der Linie ist pqueue add: new_internal
. Wenn ich diese Zeile entferne, kompiliert das Programm. Ich denke, das Problem hängt mit dem Iterationsblock zusammen [pqueue size > 1] whileTrue:
und pqueue add: new_internal.
Hinweis: Dies ist der Algorithmus zum Erstellen des Decodierungsbaums basierend auf Huffman-Code.
Fehlermeldung erweitert
Object: $<10> error: did not understand #generality
MessageNotUnderstood(Exception)>>signal (ExcHandling.st:254)
Character(Object)>>doesNotUnderstand: #generality (SysExcept.st:1448)
SmallInteger(Number)>>retryDifferenceCoercing: (Number.st:357)
SmallInteger(Number)>>retryRelationalOp:coercing: (Number.st:295)
SmallInteger>><= (SmallInt.st:215)
Leaf>><= (hzip.st:30)
optimized [] in SortedCollection class>>defaultSortBlock (SortCollect.st:7)
SortedCollection>>insertionIndexFor:upTo: (SortCollect.st:702)
[] in SortedCollection>>merge (SortCollect.st:531)
SortedCollection(SequenceableCollection)>>reverseDo: (SeqCollect.st:958)
SortedCollection>>merge (SortCollect.st:528)
SortedCollection>>beConsistent (SortCollect.st:204)
SortedCollection(OrderedCollection)>>removeFirst (OrderColl.st:295)
optimized [] in UndefinedObject>>executeStatements (hzip.st:156)
BlockClosure>>whileTrue: (BlkClosure.st:328)
UndefinedObject>>executeStatements (hzip.st:154)
Object: $<10> error: did not understand #generality
MessageNotUnderstood(Exception)>>signal (ExcHandling.st:254)
Character(Object)>>doesNotUnderstand: #generality (SysExcept.st:1448)
SmallInteger(Number)>>retryDifferenceCoercing: (Number.st:357)
SmallInteger(Number)>>retryRelationalOp:coercing: (Number.st:295)
SmallInteger>><= (SmallInt.st:215)
Leaf>><= (hzip.st:30)
optimized [] in SortedCollection class>>defaultSortBlock (SortCollect.st:7)
SortedCollection>>insertionIndexFor:upTo: (SortCollect.st:702)
[] in SortedCollection>>merge (SortCollect.st:531)
SortedCollection(SequenceableCollection)>>reverseDo: (SeqCollect.st:958)
SortedCollection>>merge (SortCollect.st:528)
SortedCollection>>beConsistent (SortCollect.st:204)
SortedCollection(OrderedCollection)>>do: (OrderColl.st:64)
UndefinedObject>>executeStatements (hzip.st:164)
Bitte spezifizieren Sie den Dialekt, den Sie verwenden (ich nehme an, es ist GNU) und mehr der Fehlermeldung, z. welche Klasse die Nachricht nicht versteht (eventuell eine Stack-Trace veröffentlichen, wenn Sie eine haben). –
Sieht aus, als ob die SortedCollection versucht, SmallIntegers mit dem hinzugefügten Objekt (der Klasse Tree?) Zu vergleichen und schlägt fehl. Enthält Ihre Warteschlange Elemente verschiedener Typen? Wenn ja, vergewissern Sie sich, dass sie über <= vergleichbar sind, oder geben Sie beim Erstellen der Sammlung einen benutzerdefinierten sortBlock an. – JayK
Ja, das funktioniert. Wenn ich das tue [putiere add: new_internal.]. es funktioniert – patzi