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



         

Глава 6. Фрагментация - часть 20


: ПОРТ ( 'порта -- 'след-порта ) DUP CONSTANT 2+ ; \ does> ( -- 'порта ) БАЗОВЫЙ.АДРЕС.ПОРТА ПОРТ ДИНАМИК ПОРТ ПЛАВНИК-А ПОРТ ПЛАВНИК-Б ПОРТ ПОДСВЕТ DROP ( адрес-порта)

Отметьте, что мы обязаны дать начальный адрес на стек перед определением первого порта, а затем, после окончания определения всех портов, вызвать DROP для удаления все еще остающегося на стеке адреса. И последнее замечание. Очень похоже, что базовый адрес порта может меняться, и поэтому должен быть определен в единственном месте. Это `не` означает, что его надо делать константой. Зная, что такой адрес не будет использоваться вне лексикона для имен портов, нисколько не будет хуже дать его здесь просто числом.

HEX 01A0 ( базовый адрес портов) DECIMAL ПОРТ ДИНАМИК ПОРТ ПЛАВНИК-А ПОРТ ПЛАВНИК-Б ПОРТ ПОДСВЕТ DROP - 198 -

ИТЕРАТИВНЫЙ ПОДХОД ПРИ РЕАЛИЗАЦИИ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ранее в этой книге мы описывали итеративный подход, уделяя особенное внимание его вкладу на стадии проектирования. Поскольку теперь мы рассматриваем реализацию, давайте убедимся, что этот подход в действительности используется и при написании кода.

------------------------------------------------------------ СОВЕТ Работайте каждый раз только над одной стороной задачи. ------------------------------------------------------------

Предположим, в нашу задачу входит рисование или стирание квадрата на заданной координате x-y. (Это та же задача, которую мы предлагали в разделе с названием "Факторизация при компиляции".) Вначале мы фокусируем свое внимание на рисовании квадратика, не думая о том, как его будем стирать. Вот к чему мы могли бы прийти:

: СЛОЙ ШИРИНА 0 DO ASCII * EMIT LOOP ; : КВАДРАТ ( верх-левый-х верх-левый-у -- ) ВЫСОТА 0 DO 2DUP I + XY СЛОЙ LOOP 2DROP ;

Проверив, что это работает правильно, мы переходим теперь к задаче использования этого кода для `стирания` квадратика. Решение просто: вместо того, чтобы вставлять внутрь программы ASCII * мы хотели бы заменять выдаваемый символ со звездочки на пробел.


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