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


Глава 7. Работа с данными: стеки и состояния - часть 20


В простейшем случае требуется сохранение и восстановление состояния. Предположим, мы изначально имеем шесть переменных, представляющих определенный компонент, как показано на рис. 7-2.

Рис..7-2. Собрание родственных переменных.

VARIABLE СВЕРХУ VARIABLE СНИЗУ VARIABLE СЛЕВА VARIABLE СПРАВА VARIABLE ВНУТРИ VARIABLE СНАРУЖИ

Теперь предположим, что нам всех их надо сохранить таким образом, чтобы можно было произвести дальнейшие действия, а затем обратно восстановить. Мы могли бы определить:

: @СОСТОЯНИЕ ( -- сверху снизу слева справа внутри снаружи) СВЕРХУ @ СНИЗУ @ СЛЕВА @ СПРАВА @ ВНУТРИ @ СНАРУЖИ @ ; : !СОСТОЯНИЕ ( сверху снизу слева справа внутри снаружи -- ) СНАРУЖИ ! ВНУТРИ ! СПРАВА ! СЛЕВА ! СНИЗУ ! СВЕРХУ ! ;

таким образом сохраняя значения на стеке до тех пор, пока не придет время их восстановить. Либо мы могли бы определить второй набор переменных для всех вышеперечисленных, и в них по отдельности сохранять состояние. Однако предпочтительней будет такая технология, при которой создается таблица, а каждый элемент таблицы имеет свое имя. Затем определяется вторая таблица такой же длины. Как видно из рисунка 7-3, можно сохранять состояние копированием таблицы, называемой УКАЗАТЕЛИ, во вторую таблицу по имени АРХИВ. - 225 -

Рис.7-3. Концептуальная модель для сохранения таблицы состояния.

УКАЗАТЕЛИ АРХИВ +-----------+ +-----------+ СВЕРХУ|___________| ====> |___________| СНИЗУ|___________| |___________| СЛЕВА|___________| |___________| СПРАВА|___________| |___________| ВНУТРИ|___________| |___________| СНАРУЖИ| | | | +-----------+ +-----------+

Этот подход мы изложили в коде на рис. 7-4.

Рис.7-4. Реализация сохранения/восстановления таблицы состояния.

0 CONSTANT УКАЗАТЕЛИ \ ' таблицы состояния, ПОЗЖЕ МЕНЯЕТСЯ : ПОЗИЦИЯ ( смещ -- смещ+2 ) CREATE DUP , 2+ DOES> ( -- a) @ УКАЗАТЕЛИ + ; 0 \ начальное смещение ПОЗИЦИЯ СВЕРХУ ПОЗИЦИЯ СНИЗУ ПОЗИЦИЯ СЛЕВА ПОЗИЦИЯ СПРАВА ПОЗИЦИЯ ВНУТРИ ПОЗИЦИЯ СНАРУЖИ CONSTANT /УКАЗАТЕЛИ \ ' конечного вычисленного смещения




Начало  Назад  Вперед