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


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


Слова-определители находят превосходное применение при создании массивов, поскольку с их помощью можно создать описание массива с определенной размерностью, которое при исполнении будет выдавать адрес нужного элемента в стек. Приведем пример слова-определителя для создания массива из символов, или байтов, с именем CARRAY. Один из возможных вариантов слова-определителя такой: : CARRAY CREATE ALLOT DOES> + ;

Если его использовать в форме 30 CARRAY NOVEMBER то будет создан массив из 30 байтов, элементы которого нумеруются числами от 0 до 29. На стадии исполнения слова-ребенка требуется наличие в стеке номера элемента массива, чтобы вычислить его адрес. Таким образом, при исполнении 1 NOVEMBER C@ . будет рассчитан адрес второго байта в массиве NOVEMBER, извлечено его содержимое и после этого выведено на экран.

Существуют два способа нумерации элементов массивов, начиная либо с нулевого элемента (как в вышеприведенном случае), либо с элемента 1. Если вы хотите, чтобы выражение 1NOVEMBER выдало адрес первого (а не второго) байта в массиве NOVEMBER, определите CARRAY таким образом: : CARRAY CREATE ALLOT OOES> 1- + ; Несмотря на то, что нумерация с первого элемента приводит к небольшому проигрышу в скорости, вы убедитесь в том, что она удобнее для работы. Для создания массивов чисел одинарной длины можно использовать похожее определение (принимая также, что нумерация элементов начинается с нуля) : ARRAY CREATE 2 * ALLOT DOES> SWAP 2 * + ;

Для регистрации цвета фотографических красителей уверены, что вы сможете самостоятельно проанализировать, что делает это определение. Можете ли вы предложить определение, которое создает массив, начинающийся с первого элемента ?

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


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