Учебное пособие по языку ФОРТ
- Автор: ИТФ «Технофорт»
- Жанр: Современные российские издания / Литература ХX века (эпоха Социальных революций) / Программирование: прочее / Forth
- Дата выхода: 1993
Читать книгу "Учебное пособие по языку ФОРТ"
7. Константы, переменные, массивы
Для передачи данных от слова к слову можно использовать стек. Но для длительного хранения информации применяются переменные и константы.
Определяющее слово "CONSTANT" в тексте
CONSTANT имя
определяет новое слово "имя" как константу со значением, равным числу на вершине стека, и удаляет из стека это число. В дальнейшем выполнение слова "имя" помещает это число в стек.
Специфическое для языка Форт преимущество использования в программе констант состоит в следующем. Скомпилированное определение, содержащее константу, занимает меньший объем памяти, чем то же определение с изображением самого числа. При неоднократном появлении числа в программе это становится существенным.
Как правило, в базовом наборе слов определены константы:
0 CONSTANT FALSE и 1 CONSTANT TRUE
0 CONSTANT 0 и 1 CONSTANT 1
Определяющее слово "VARIABLE", которое используется в тексте
VARIABLE имя
резервирует в словаре 2 байта под значение переменной "имя". Исполнение слова "имя" кладет в стек число - адрес зарезервированного места. Этот адрес может использоваться другими словами.
Пример. Текст
A @ 5 + B ! (A и B - переменные)
соответствует оператору "B:=A+5" других языков программирования.
Специального слова для организации привычной по другим алгоритмическим языкам конструкции массива в языке Форт нет. Ниже приводится один из возможных способов:
1. слово "2ALLOT" резервирует в кодофайле память под n чисел (число n берется со стека) и кладет в стек адрес начала зарезервированного места
: 2ALLOT ( ... n --> ... a )
HERE SWAP
2* ALLOT ;
2. слово для формирования элемента массива:
: [I] ( ... i a --> ... a[i] )
OVER + + ;
3. заводится нужный массив
N ( N - константа - число элементов массива )
2ALLOT ( на стеке будет адрес начала массива )
CONSTANT B ( B - имя массива )
Если, например, поместить в стек номер нужного элемента в массиве B, то при выполнении текста "B [I]" на стеке окажется адрес этого элемента.
Обратите внимание, что проверку корректности номера элемента массива этот способ не обеспечивает и что элементы массива надо нумеровать с нуля.