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


         

В этой задаче каждое из


\ Телефонные тарифы 03/30/84 VARIABLE ОПЕРАТОР? \ 90, если помогал оператор, иначе 0 VARIABLE #МИЛЬ \ сотни миль : ?ПОМОЩЬ ( прямой-вызов плата -- полная-плата) ОПЕРАТОР? @ + ; : РАССТОЯНИЕ ( -- плата ) #МИЛЬ @ /МИЛЬ * ; : ПЕРВАЯ ( -- плата ) 1МИНУТА ?ПОМОЩЬ РАССТОЯНИЕ + ; : ДОПОЛНИТЕЛЬНАЯ ( -- плата ) +МИНУТА РАССТОЯНИЕ + ; : СУММА ( #минут -- полная-плата) 1- ДОПОЛНИТЕЛЬНАЯ * ПЕРВАЯ + ;
В этой задаче каждое из измерений таблицы данных состоит из трех взаимно исключающих состояний. Поэтому простое булевское число (истина/ложь) здесь не подходит. Каждое измерение задачи реализовано особым образом. - 258 -
Текущий тариф, который зависит от времени дня, хранится как адрес, представляющий одну из трех подтаблиц структуры тарифов. Мы можем сказать:
ПОЛНЫЙ ТАРИФ !
или
НИЗКИЙ ТАРИФ !
и т.д. Текущая плата, будь то за первую минуту, за последующие или за расстояние, выражается как смещение в таблице (0, 2 или 4). Замечание по оптимизации: мы разработали двухразмерную таблицу как набор из трех одноразмерных, указываемых ТАРИФом. Этот метод устраняет надобность в умножении, которое иначе бы потребовалось для построения структуры с двумя измерениями. В определенных случаях умножение может работать недопустимо медленно.
ТАБЛИЦА РЕШЕНИЙ С ДВУМЯ ИЗМЕРЕНИЯМИ.
Мы возвращаемся вновь к нашему примеру Крошечного Редактора из третьей главы для иллюстрации таблицы решений о двух измерениях. На рисунке 8-5 мы конструируем таблицу функций, которые следует запускать, когда нажимаются различные клавиши. Результат то же, что и при применении оператора CASE, но только для двух имеющихся режимов - нормального и режима вставки. Каждая клавиша имеет различное поведение в зависимости от текущего режима. Первый блок определяет смену режимов. Если мы вызываем
НОРМАЛЬНЫЙ РЕЖИМ# !
то переходим в нормальный режим.
ВСТАВОЧНЫЙ РЕЖИМ# !
вводит режим вставки. Следующий блок строит таблицу функций по имени ФУНКЦИИ. Она состоит из кода ASCII клавиши, за которым следует адрес программы, вызываемой в нормальном режиме, а дальше - адрес программы, вызываемой в режиме вставки, когда на эту клавишу нажимают.

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