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


         

При использовании внутри определения он


При использовании внутри определения он будет искать слово, следующее за СВЕТЛО - например, СИНИЙ - и передавать этот адрес слову EXECUTE, которое исполняет СИНИЙ, при этом на стеке остается число 1. "Отработав" оператор СИНИЙ, СВЕТЛО теперь делает "ИЛИ" с числом 8, получая 9.)
Это определение будет работать при вызове из входного потока, но понадобятся специальные меры, если мы захотим использовать СВЕТЛО внутри другого определения, как например:
: РЕДАКТИРОВАНИЕ СВЕТЛО СИНИЙ БОРДЮР ;
Даже при работе со входным потоком использование EXECUTE приведет к катастрофе, если после СВЕТЛО случайно будет указано что-нибудь, отличное от нужного определенного слова.
Предпочтительный подход заключается в том, что, если мы вынуждены использовать именно такой синтаксис, то СВЕТЛО должно устанавливать флаг для СИНИЙ, а СИНИЙ должен определять наличие такого флага; это мы позже еще будем рассматривать.
Случается, что заглядывание вперед по входному потоку желательно, даже обязательно. (Предлагаемое далее слово TO часто реализуется именно так [3].)
Но, в общем случае, опасайтесь упреждающих заглядываний. Вам иначе придется готовиться к разочарованиям.
------------------------------------------------------------ СОВЕТ Пусть команды исполняют сами себя. ------------------------------------------------------------
Это правило соотносится с предыдущим. Позволять словам самим делать свою работу - это один из философских кульбитов Форта. Свидетельство тому - компилятор Форта (функция, компилирующая определения через двоеточие), карикатура на который представлена на рисунке 4-7. В нем всего несколько правил:
Брать следующее слово во входном потоке и искать его в словаре.
Если это обычное слово, `компилировать` его адрес.
Если это слово "немедленного исполнения", `исполнить` его.
Если это слово не определено, попытаться преобразовать его в цифру и скомпилировать как литерал.
Если это не число, выполнить аварийный выход с сообщением об ошибке.

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