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



             

Глава 6. Фрагментация - часть 5


: INIT-ALL-CHS INIT-CH0 INIT-CH1 INIT-CH2 INIT-CH3 INIT-CH4 INIT-CH5 INIT-CH6 INIT-CH7 ;

Во-первых, имеется сходство между именами переменных, кроме того, сходство есть и в коде, используемом в словах INIT-CH.

Вот улучшенный вариант. Одинаковые имена переменных были факторизованы в три структуры данных, а длинные процедуры в словах INIT-CH были вынесены в структуру DO LOOP:

: МАССИВ ( #ячеек -- ) CREATE 2* ALLOT DOES> ( i -- 'ячейки) SWAP 2* + ; 8 МАССИВ STATUS ( #канала -- адр ) 8 МАССИВ TENOR ( " ) 8 МАССИВ UPSHOT ( " ) : УСТАНОВИТЬ 8 0 DO 0 I STATUS ! 1000 I TENOR ! -1 I UPSHOT ! LOOP ;

Вот весь нужный нам код.

Даже и в более невинных случаях создание маленькой структуры данных может сократить количество дополнительных имен. Имеется соглашение, по которому в Форте текст хранится в "строках со счетчиком" (т.е. с количеством символов, хранимом в первом байте). Любое слово, возвращающее "адрес строки", на самом деле дает начальный адрес, адрес счетного байта. Такая двухэлементная структура данных не только убирает необходимость в раздельных именах для строки и ее длины, но также облегчает перемещение такой строки в памяти, поскольку и строку, `и` ее счетчик можно скопировать сразу, одним словом CMOVE.

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

ФАКТОРИЗАЦИЯ ФУНКЦИЙ В ОПРЕДЕЛЯЮЩИЕ СЛОВА.

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

Рассмотрите структуру этого кода (не беспокоясь об его назначении - позже такой пример Вам еще встретится):

: ОТТЕНОК ( цвет -- цвет' ) 'СВЕТЛЫЙ? @ OR 0 'СВЕТЛЫЙ? ! ; : ЧЕРНЫЙ 0 ОТТЕНОК ; : СИНИЙ 1 ОТТЕНОК ; : ЗЕЛЕНЫЙ 2 ОТТЕНОК ; : ЖЕЛТЫЙ 3 ОТТЕНОК ; : КРАСНЫЙ 4 ОТТЕНОК ; : ФИОЛЕТОВЫЙ 5 ОТТЕНОК ; : КОРИЧНЕВЫЙ 6 ОТТЕНОК ; : СЕРЫЙ 7 ОТТЕНОК ;




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