Язык программирования Форт


Глава 11. Создание слов-определителей - часть 16


Первые позиции в IMAGE и CALCS названы соответственно #IMAGE и #CALC. Теперь мы определим слова : CLEAR-IMAGE IMAGE LLEN 32 FILL ; (очистка_изображения) : CLEAR-CALCS CALCS LLEN 0 FILL ; (очистка__счетчика_соседей) для того, чтобы производить очистку массивов, заполняя IMAGE пробелами и CALCS нулями. Для каждой клетки, обнаруженной в массиве IMAGE, мы должны в соответствующих элементах справа и слева от этой клетки массива CALCS увеличить их содержимое на единицу. Эта задача решается двумя словами: : INCS ( адр --) >R R@ C@ 1+ R@ С! (Слева от клетки) R@ 1+ С@ 1+ R@ 1+ С! (На месте клетки) R@ 2+ С@ 2 R> 2+ С! (Справа от клетки) ; : INC-CALC ( п -) DUP *IMAGE + С@ CHAR = IF *CALCS + 1- INCS ELSE DROP THEN ; где слово INCS инкрементирует байты по трем адресам: слева, справа и в текущей позиции, а слово INC-CALC анализирует n-й символ массива IMAGE, не равен ли он CHAR (т.е. символу, изображающему клетку), и если это так, то добавляет 1 к соответствующим элементам в массиве CALCS. Подсчет соседей в каждой позиции для всей строки производится при помощи слова: : CALCULATE CLEAR-CALC LLEN 0 DO I INC-CALC LOOP :

Оно занимается тем, что рассчитывает изменяющиеся значения элементов массива CALC для текущего расположения клеток в массиве IMAGE, затем информация, имеющаяся в массиве CALC, должна быть переведена в новую картину, соответствующую новому поколению клеток. Последнее выполняется процедурой : MAKE-IMAGE CLEAR-IMAGE LLEN 0 DO *CALCS I + C@ DUP 1 = SWAP 2 = OR IF CHAR *IMAGE I + C! THEN LOOP ; которая очищает массив IMAGE, затем с помощью цикла проходит по всем позициям массива CALCS, определяя, равно ли значение элемента 1 или 2, и если это так, то в массив IMAGE, выводимый на экран, помещается клетка (т.е. символ CHAR). Это все, что касается собственно логики программы. Остальная часть программы служит для того, чтобы загрузить ее, записать начальные значения в массивы и установить начальные условия, т.е. инициализировать эволюцию LINELIFE.

Рассмотрим слово-определитель MAKEDO.


- Начало -  - Назад -  - Вперед -