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



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


СОВЕТЫ ПО СТЕКУ ~~~~~~~~~~~~~~~ ------------------------------------------------------------ СОВЕТ Убедитесь в том, что изменения на стеке происходят при любых возможных потоках передачи управления. ------------------------------------------------------------

В этом стековом комментарии на слово CMOVE> (рис. 7-1), внутренняя скобка очерчивает содержимое цикла DO LOOP. Глубина стека при выходе из цикла та же, что и при входе в него: один элемент. Внутри внешних скобок результат работы на стеке части IF тот же, что и части ELSE: остается один элемент. (Что представляет собой этот оставшийся элемент, значения не имеет, и поэтому обозначается "х" сразу после THEN.)

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

Для примера:

: COUNT ( a -- a+1 # ) DUP C@ SWAP 1+ SWAP ;

(где вначале Вы вычисляете счетчик) более эффективно может быть записано в виде:

: COUNT ( a -- a+1 # ) DUP 1+ SWAP C@ ;

------------------------------------------------------------ СОВЕТ Где можно, сохраняйте количество возвращаемых аргументов постоянным во всех возможных случаях. ------------------------------------------------------------

Часто обнаруживаются определения, которые выполняют некоторую работу и, если что-то было не так, возвращают код ошибки. Вот один из путей, по которому можно спроектировать стековый интерфейс:

( -- код-ошибки f | -- t )

Если значение флага - истина, то операция удачна. Если же оно - ложь, то операция окончилась неудачей и на стеке присутствует еще одно число, показывающее природу ошибки. - 213 -

Вы можете обнаружить, что манипуляции со стеком проще, если переделать интерфейс так:

( -- код-ошибки | 0=нет-ошибки )

Одно число служит и флагом, и (при неудаче) номером ошибки. Обратите внимание на то, что при этом использована обратная логика: не равенство нулю говорит об ошибке.


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