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



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


DOER РЕЧЬ : ПЕРЕКЛЮЧИТЬ BEGIN MAKE РЕЧЬ ." ПРИВЕТ " MAKE РЕЧЬ ." ПРОЩАЙ " 0 UNTIL ;

5. Для создания ссылки вперед. Такая ссылка обычно нужна в качестве "затычки", то есть слова, вызываемого в определении нижнего уровня, действие которого определится только в компоненте, который будет создан в программе позже. Для реализации ссылки вперед постройте слово с помощью DOER до первого использования его имени.

DOER ПОКА-НЕ-ОПРЕДЕЛЕНО

Позже в программе используйте MAKE:

MAKE ПОКА-НЕ-ОПРЕДЕЛЕНО ВЕСЬ ЭТОТ ШУМ ; - 235 -

(Помните, что MAKE может использоваться и вне определения через двоеточие.) 6. Рекурсия, прямая и косвенная. Прямая рекурсия возникает тогда, когда слово обращается к самому себе. Хорошим примером может послужить рекурсивное определение наибольшего-общего-делителя:

НОД от а, б = а если б = 0 НОД от б, а mod б если б > 0

Это отлично переводится в:

DOER НОД ( а б -- нод) MAKE НОД ?DUP IF DUP ROT ROT MOD НОД THEN ;

Косвенная рекурсия имеет место тогда, когда одно слово вызывает второе слово, а второе слово вызывает первое. Это можно устроить, используя конструкцию:

DOER Б : А ... Б ... ; MAKE Б ... А ... ;

7. Отладка. Я часто определяю:

DOER SNAP

(сокращение от SNAPSHOT - моментальный снимок), затем внедряю SNAP в свою задачу в точке, в которой хочу ее проконтролировать. К примеру, вызывая SNAP внутри цикла интерпретатора клавиатуры, я могу так настроить SNAP, чтобы наблюдать за тем, что происходит в структуре данных по мере нажатия клавиш. И я могу изменить функцию SNAP без перекомпиляции всего цикла.

Ситуации, в которых предпочтителен подход с использованием ' и EXECUTE, возникают тогда, когда необходимо передать управление через адрес вектора, например, при векторизации через таблицу решений, или при сохранении/восстановлении содержимого вектора.

ИТОГИ ~~~~~ В этой главе мы исследовали все за и против использования стека или переменных и других структур данных. Использование стека предпочтительней для обеспечения тестирования и возможности повторного использования, однако слишком большое - 236 -

количество чисел для манипуляций на стеке в пределах одного определения вредит удобству как при написании, так и при чтении программ. Мы исследовали также технику сохранения и восстановления структур данных и в заключение изучили векторизованное исполнение с использованием конструкций DOER/MAKE.

ЛИТЕРАТУРА ~~~~~~~~~~ 1. Michael Ham, "Why Novices Use So Many Variables," `FORTH Dimensions`, vol. 5, no. 4, November/December 1983. 2. Daniel Slater, "A State Space Approach to Robotics," `The Journal of FORTH Applications and Research`, 1, 1 (September 1983), 17.




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