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



         

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


В Фортах 79-го стандарта используйте:

: ЕСТЬ [COMPILE] ' , ;

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

HERE /КЛ - CONSTANT 'НЕ \ адрес клавиши несовпадения

Мы сделали константу для последней строки в таблице. (В тот момент, когда вызывается HERE, оно указывает на следующую - 261 -

свободную ячечку после последнего элемента таблицы. Последняя строка таблицы начинается на 6 байтов раньше.) Теперь имеются два слова:

ФУНКЦИИ ( адрес начала таблицы функций) 'НЕ ( адрес строки "не-совпадения"; это программы, вызываемые для любой клавиши, которой нет в таблице)

Мы используем эти имена для получения адресов, передаваемых слову DO:

'НЕ ФУНКЦИИ DO

для запуска цикла, который пробегает от начала таблицы до ее конца. Нам неизвестно, сколько строк записано в этой таблице. Мы даже можем добавить или убрать строку в ней без необходимости изменения какого-либо другого места кода, даже того, где производится поиск в таблице. Точно также константа /КЛ упрятывает информацию о количестве колонок в таблице. К несчастью, подход, избранный для реализации слова 'ФУНКЦИИ упрощен и нехорош; в нем используется локальная переменная для уменьшения манипуляций со стеком. Более простое решение без использования локальной переменной:

: 'ФУНКЦИИ ( клавиша -- адр-совпадения ) 'НЕ SWAP 'НЕ ФУНКЦИИ DO DUP I @ = IF SWAP DROP I SWAP LEAVE THEN /КЛ +LOOP DROP ;

(Мы предложим другое решение попозже в этой главе, в "Использовании структурированных выходов".)

ТАБЛИЦЫ РЕШЕНИЙ ДЛЯ ПОВЫШЕНИЯ СКОРОСТИ.

Мы установили, что если можно вычислить значение вместо поиска его по таблице, то так и следует делать. Исключение составляет случай, когда требования по скорости оправдывают большую сложность таблицы. Вот пример вычисления степеней двойки с восьмиразрядной точностью:

CREATE ДВОЙКИ 1 C, 2 C, 4 C, 8 C, 16 C, 32 C, : 2** ( n -- 2-в-степени-n ) ДВОЙКИ + C@ ; - 262 -

Вместо вычисления ответа при помощи умножения двойки на саму себя "n" раз, все такие ответы вычислены заранее и записаны в таблицу.


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