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


         

Мы пытаемся минимизировать зависимость программы


Мы пытаемся минимизировать зависимость программы на Форте от логики. Однако в этом случае нам нужен условный оператор IF, поскольку имеются исключительные ситуации, которые нужно учитывать. Впрочем, мы все равно минимизировали сложность управляющей структуры, ограничив число конструкций IF THEN в данном определении до одной.
Да, нам все еще приходится различать случай 4-х от случая 9-ти, однако мы перепоручили это структурное определние определению более низкого уровня - проверку "4-или-9" и обработку "особого случая".
Что в действительности ясно из нашего определения, так это то, что `любое` из исключений - 4 или 9 - должно запрещать исполнение обычного случая. Недостаточно просто проверять на каждое из исключений, как в такой версии:
: ЦИФРА ( n) 4-СЛУЧАЙ? IF ЕДИНИЧКА ПЯТЕРКА THEN 9-СЛУЧАЙ? IF ЕДИНИЧКА ДЕСЯТКА THEN обычный случай... ;
поскольку без обычного случая никогда не обходится. (Нет способа поместить ELSE перед обычным случаем, поскольку часть ELSE должна находиться между IF и THEN.)
Если мы настаиваем на раздельной обработке обоих исключений, то должны сформировать в каждом из них передачу дополнительного флага о том, что исключение возникло. Если один из этих флагов установлен, тогда обычный случай исключается:
: ЦИФРА ( n) 4-СЛУЧАЙ? IF ЕДИНИЧКА ПЯТЕРКА THEN 9-СЛУЧАЙ? IF ЕДИНИЧКА ДЕСЯТКА THEN OR NOT IF обычный случай THEN ;
Однако этот подход неоправданно усложняет определение, добавляя новые структуры управления. Оставим все как было.
Теперь у нас есть общая идея о структуре нашего главного определения.
Мы сказали: "если цифра - 5 или более, начинать с ПЯТЕРКИ и вычитать пять из числа; иначе ничего не делать. Затем напечатать столько ЕДИНИЧЕК, сколько необходимо для суммы числа".
Прямое преобразование этих правил в Форт может выглядеть как:
( n) DUP 4 > IF ПЯТЕРКА 5 - THEN ЕДИНИЧКИ
Такая запись технически корректна, однако мы знакомы с техникой деления по модулю, а ведь это - типовая ситуация для использования деления по модулю 5.

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