Способ мышления-Форт

         

Упрятывание конструкции структур данных


Мы уже отмечали две особенности Форта, обеспечивающие использование описанной методологии -- автоматические вызовы и автоматическую передачу данных. Третья особенность позволяет описывать структуры данных внутри компонента в терминах предварительно описанных компонентов. Эта особенность -- прямой доступ к памяти.

Предположим, что мы определяем переменную ЯБЛОКИ:

VARIABLE ЯБЛОКИ

Мы можем записать число в эту переменную для указания того, сколько яблок имеется в текущий момент:

20 ЯБЛОКИ !

Мы можем распечатать содержимое переменной:

ЯБЛОКИ ? 20 ok ~~~~~~~

Мы можем увеличить ее содержимое на единицу:

1 ЯБЛОКИ +!

(Новичок может изучить механизм работы этих фраз по .)

Слово ЯБЛОКИ имеет единственную функцию: положить на стек `адрес` в памяти, где хранится количество яблок. О количестве можно думать как о "вещи", в то время как о словах, устанавливающих количество, считывающих или увеличивающих его -- как о "действиях".

Форт удобно отделяет "вещи" от "действий", поскольку разрешает передачу адресов через стек и имеет команды "разыменования" и "загрузки".

Мы обсуждали важность проектирования по признаку того, что может измениться. Предположим, мы написали множество кода, использующего переменную ЯБЛОКИ. И теперь, в одиннадцатом часу, обнаруживаем, что необходимо отслеживать два различных типа яблок -- красных и зеленых!

Не стоит опускать руки, лучше вспомнить функцию слова ЯБЛОКИ: давать адрес. Если нам нужно два различных количества, ЯБЛОКИ могут давать два различных адреса, в зависимости от того, о каком типе яблок мы говорим. Так мы можем определить более сложную версию слова ЯБЛОКИ, как показано ниже:

VARIABLE ЦВЕТ ( указатель на текущую переменную) VARIABLE КРАСНЫЕ ( количество красных яблок) VARIABLE ЗЕЛЕНЫЕ ( количество зеленых яблок) : КРАСНЫЙ ( тип яблок - красные) КРАСНЫЕ ЦВЕТ ! ; : ЗЕЛЕНЫЙ ( тип яблок - зеленые) ЗЕЛЕНЫЕ ЦВЕТ ! ; : ЯБЛОКИ ( -- адр текущей яблочной переменной) ЦВЕТ @ ;




Содержание  Назад  Вперед