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



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


Для факторизации внутренних фаз из определений родственных, но лежащих внутри таких структур управления, как циклы.

Вообразите себе определение слова по имени ДАМП, расчитанного для исследования определенной области памяти.

: ДАМП ( а # ) 0 DO I 16 MOD 0= IF CR DUP I + 5 U.R 2 SPACES THEN DUP I + @ 6 U.R 2 +LOOP DROP ; ~~~~~~~~~~~~~~~~~ Проблема возникает, когда Вы пишете определение с именем СДАМП, расчитанным на печать не в по-словном, а по-байтном формате:

: ДАМП ( а # ) 0 DO I 16 MOD 0= IF CR DUP I + 5 U.R 2 SPACES THEN DUP I + C@ 4 U.R LOOP DROP ; ~~~~~~~~~~~~~~~ Код в этих двух определениях одинаков, за исключением подчеркнутых фрагментов. Но их факторизация затруднена, поскольку они находятся внутри циклов DO LOOP. Вот решение этой проблемы с использованием DOER/MAKE. Код, содержащий различия, был заменен на слово .ЯЧЕЙКИ, поведение которого векторизуется кодом в ДАМПе и СДАМПе. (Обратите внимание на то, что "1 +LOOP" дает тот же эффект, что и "LOOP".)

DOER .ЯЧЕЙКИ ( а -- прибавка ) \ распечатать байт или слово : ( а # ) 0 DO I 16 MOD 0= IF CR DUP I + 5 U.R 2 SPACES THEN DUP I + .ЯЧЕЙКИ +LOOP DROP ; : ДАМП ( а # ) MAKE .ЯЧЕЙКИ @ 6 U.R 2 ;AND ; : СДАМП ( а # ) MAKE .ЯЧЕЙКИ C@ 4 U.R 1 ;AND ;

Обратите внимание на то, как ДАМП и СДАМП `выставляют` вектор, а затем переходят к `исполнению` (слово ). 3. Для изменения состояния родственных функций после вызова единственной команды. К примеру: - 233 -

DOER TYPE' DOER EMIT' DOER SPACES' DOER CR' : ВИДИМО MAKE TYPE' TYPE ;AND MAKE EMIT' EMIT ;AND MAKE SPACES' SPACES ;AND MAKE CR' CR ; : НЕВИДИМО MAKE TYPE' 2DROP ;AND MAKE EMIT' DROP ;AND MAKE SPACES' DROP ;AND MAKE CR' ;

Мы здесь определили набор векторизованных определений для вывода, имена которых имеют на конце значок "вторичности". Слово ВИДИМО устанавливает их на соответствующие функции. Слово НЕВИДИМО переводит их в нерабочее положение, съедая аргументы, которые нормально должны были бы быть ими использованы. Говорим НЕВИДИМО - и все слова, определенные в терминах этих четырех операторов вывода `не` будут производить вывод. 4.


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