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




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


Предположим, в нашей задаче мы хотим использовать эти символы для создания рисунка. Мы знаем для каждого символа, что хотим иметь в каждой из шести позиций - и должны выдать подходящий ASCII-код на принтер. Не нужно слишком долго приглядываться для понимания того, что здесь применена очень четкая последовательность. Пусть мы имеем шестибайтную таблицу, в которой каждый байт представляет пиксел в последовательности:

+-----------+ ПИКСЕЛЫ | 0 | 1 | |-----+-----| | 2 | 3 | |-----+-----| | 4 | 5 | +-----------+

и пусть каждый байт содержит шестнадцатеричное FF, если он "включен", ноль - если "выключен", тогда вот как мало надо кода, чтобы вычислить нужный символ:

CREATE ПИКСЕЛЫ 6 ALLOT : ПИКСЕЛ ( i -- a ) ПИКСЕЛЫ + ; : СИМВОЛ ( -- граф-символ ) 160 6 0 DO I ПИКСЕЛ C@ I 2** AND + LOOP ;

(Мы ввели слово 2** несколько советов назад.) Нет необходимости принимать какие-нибудь решения в определении слова СИМВОЛ. Этот последний просто вычисляется. - 266 -

Замечание: для использования того же алгоритма при переводе шести смежных точек на большую ось мы можем просто переопределить слово ПИКСЕЛ. Это пример добавления перенаправления задним числом и хорошей декомпозиции. К сожалению, внешние компоненты не всегда хорошо спроектированы. К примеру, персональный компьютер IBM использует в своем дисплее аналогичную схему графических символов, но без какой-нибудь выраженной взаимосвязи между кодами ASCII и наборами точек. Единственный способ найти нужный символ - это сравнение наборов в просмотровой таблице.

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

Мур:

Ассемблер для 68000 - это еще один пример, об который можно сломать голову в поисках того, как бы получше выразить эти коды операций минимальным набором команд. По всем признакам, хорошего решения нет. Люди, проектировавшие 68000, вообще не думали ни о каких ассемблерах. А ведь они могли бы гораздо облегчить положение вещей, причем задаром.

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




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