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



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


Однако в данном конкретном случае еще один подход может упразднить всю эту суету. Мы можем использовать единственную переменную не в качестве флага, а как счетчик. Определяем:

VARIABLE 'НЕВИДИМЫЙ? ( t=невидимый) : ВЫВОД 'НЕВИДИМЫЙ? @ 0= IF [ВЫВОД] THEN ; : НЕВИДИМЫЙ 1 'НЕВИДИМЫЙ? +! ; : ВИДИМЫЙ -1 'НЕВИДИМЫЙ? +! ;

Заглядывающий код начинает с вызова НЕВИДИМЫЙ, который наращивает счетчик на единичку. Значение, отличное от нуля - это "истина" (t), поэтому ВЫВОД не будет работать. По завершению заглядывания код вызывает ВИДИМЫЙ, который уменьшает счетчик назад к нулю ("ложь"). Код составления содержания также начинает с НЕВИДИМЫЙ и заканчивает ВИДИМЫЙ. Когда при сборе содержания мы достигаем заглядывания вперед, второе применение НЕВИДИМЫЙ увеличивает значение счетчика до 2. Последующий вызов ВИДИМЫЙ уменьшает счетчик до единицы, так что мы все равно остаемся невидимыми до тех пор, пока содержание не будет составлено. (Отметьте, что мы должны применять 0= вместо NOT. В стандарте-83 изменена функция NOT так, что она означает инверсию чего-либо, так что 1 NOT означает "истина". Между прочим, я думаю, что это было ошибкой.) Такое использование счетчика может быть, однако, опасным. Оно требует парности в использовании команд: два вызова ВИДИМЫЙ приводят к ситуации невидимости. Чтобы этого не было, можно проверять в ВИДИМЫЙ обнуление счетчика:

: ВИДИМЫЙ 'НЕВИДИМЫЙ? @ 1- 0 MAX 'НЕВИДИМЫЙ? ! ;

ТАБЛИЦА СОСТОЯНИЯ ~~~~~~~~~~~~~~~~~ Одна переменная способна отображать единственное условие либо флаг, значение или адрес функции. Собранные вместе условия представляют `состояние` задачи или определенного компонента [2]. Некоторые приложения требуют - 224 -

возможности сохранения текущего состояния для его последующего восстановления или, быть может, чтобы иметь альтернативные состояния.

------------------------------------------------------------ СОВЕТ Когда для задачи требуется содержать целую группу условий одновременно, используйте таблицу состояния, а не отдельные переменные. ------------------------------------------------------------




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