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



         

Глава 8. Минимизация структур управления - часть 14


Если таковая обнаружена, оно кладет на стек минус-единицу; в противном случае - ноль. Но обратите внимание, что выход получается чисто арифметическим; качественных изменений самого процесса нет. Из этого факта можно извлечь выгоду, используя само логическое значение:

: S>D ( n -- d ) \ распространение знака на d DUP 0< ;

Эта версия оставляет на стеке ноль или минус-единицу без принятия решений. (В системах до 83-го стандарта определение должно было бы быть таким):

: S>D ( n -- d ) \ распространение знака на d DUP 0< NEGATE ;

См. приложение В.) С такими "гибридными числами" можно проделывать даже больше:

------------------------------------------------------------ СОВЕТ Для повышения эффективности формирования числового выхода используйте AND. ------------------------------------------------------------ - 253 -

Для случая структуры, принимающей решение о формировании нуля либо ненулевого числа "n", традиционная фраза

( ? ) IF n ELSE 0 THEN

эквивалентна более простому выражению

( ? ) n AND

Опять же секрет в том, что в системах стандарта '83 "истина" представляется -1 (всеми единичками). Делая AND числу "n" с флагом, мы оставляем либо "n" (все биты остаются), либо "0" (все биты очищаются). Для закрепления - еще пример:

( ? ) IF 200 ELSE 0 THEN

то же самое, что

( ? ) 200 AND

Посмотрите на следующий случай:

n a b < IF 45 + THEN

Фраза либо добавляет 45 к "n", либо нет, в зависимости от соотношения величин "a" и "b". Поскольку "добавить 45 или нет" - это то же, что и "добавить 45 или добавить 0", то различие в двух возможных исходах - чисто числовое. Мы можем позволить себе избежать принятия решения и просто вычислить:

n a b < 45 AND +

----------------------------------------------------------------

Мур:

Выражение "45 AND" работает быстрее, чем IF, и, конечно, более грациозно. Оно проще. Если Вы освоите привычку обращать внимание на точки, в которых вычисляете отличие одного значения от другого, то обычно при выполнении арифметических действий над логическими величинами Вы будете получать тот же результат более чистым образом.


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