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


         

Если таковая обнаружена, оно кладет


Если таковая обнаружена, оно кладет на стек минус-единицу; в противном случае - ноль. Но обратите внимание, что выход получается чисто арифметическим; качественных изменений самого процесса нет. Из этого факта можно извлечь выгоду, используя само логическое значение:
: 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, и, конечно, более грациозно. Оно проще. Если Вы освоите привычку обращать внимание на точки, в которых вычисляете отличие одного значения от другого, то обычно при выполнении арифметических действий над логическими величинами Вы будете получать тот же результат более чистым образом.

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