Если Squeak не является языком сценариев, то где находится древовидная структура данных? - PullRequest
1 голос
/ 22 февраля 2011

Поскольку Squeak является средой с открытым исходным кодом, мы можем видеть реализацию структур данных, таких как OrderedCollection>>addFirst:

addFirst: newObject 
"Add newObject to the beginning of the receiver. Answer newObject."

firstIndex = 1 ifTrue: [self makeRoomAtFirst].
firstIndex := firstIndex - 1.
array at: firstIndex put: newObject.
^ newObject

и OrderedCollection>>removeFirst:

removeFirst: n
"Remove first n object into an array"

| list |
list := Array new: n.
1 to: n do: [:i |
    list at: i put: self removeFirst].
^ list

Тогда я могу манипулировать структурой данных стека, правильно?

Мне сообщили, что Smalltalk не имеет структуры указателей; хотя языки, такие как Java, также не имеют структуры указателей, не как язык сценариев, он должен реализовывать некоторую фундаментальную структуру данных, такую ​​как дерево, диаграмма (см. Сценарии: программирование на более высоком уровне) для 21-го века ), затем поднимите еще один вопрос:

Как Smalltalk реализует древовидную структуру данных?

1 Ответ

4 голосов
/ 22 февраля 2011

В Smalltalk везде есть указатели, как и в Java. Вы не можете делать C-подобные вещи, такие как указатели приращения, но myVar := OrderedCollection new означает, что myVar - это указатель, указывающий на пустой OrderedCollection.

Да, вы можете смоделировать стек, используя OrderedCollection, используя addFirst: для выталкивания элементов и removeFirst: и removeFirst для выталкивания элементов. (Аналогично, вы можете смоделировать очередь, нажав элементы с addFirst: и удалив их с помощью removeLast.

Вы можете реализовать деревья в Smalltalk так же, как и на любом языке. Например, я написал базовую реализацию дерева для игры с zippers . Посмотрите на класс ZTree, который реализует очень общую древовидную структуру - у узла может быть любое количество дочерних элементов.

...