Руководство по программированию на Форте [Илья Тарасов] (fb2) читать постранично, страница - 3

- Руководство по программированию на Форте 545 Кб, 67с. скачать: (fb2)  читать: (полностью) - (постранично) - Илья Тарасов

 [Настройки текста]  [Cбросить фильтры]

программный продукт, или «черный ящик». Некоторые технологии, принципы взаимодействия программных модулей, интерпретации текста и т.д., могут оказаться полезными для реализации их в программах, разрабатываемых с использованием других языков программирования.

2. Работа со стеком и арифметические операции

Стек – это основной элемент Форта, обеспечивающий передачу данных между отдельными словами. Он представляет собой массив данных, организованный по принципу «первым зашел – последним вышел». Наглядно такую структуру можно представить в виде стопки листов бумаги, когда наверху находится лист, положенный туда последним. Все слова Форта работают с данными, оставленными для них на вершине стека. При этом механизм, с помощью которого данные попали на стек, совершенно неважен. Таким образом, числа на стеке могут рассматриваться как некоторый аналог аргументов, передаваемых функциям таких языков программирования, как Си или Паскаль.

Каждое слово Форта ожидает получить на стеке данные в определенном порядке. Поэтому Форт имеет в своем составе группу слов, предназначенных специально для манипуляций числами на стеке. Эти слова являются своеобразной «визитной карточкой» Форта, поскольку знакомство с языком обычно начинают именно с них, и сложно представить программу, в которой они бы не использовались. Результатом работы слов является изменение состояния стека. Поэтому перед рассмотрением первой группы слов введем понятие стековой нотации. Под этим термином понимается запись состояния стека до выполнения слова и после выполнения. Например, запись ( A, B  C ) означает, что до исполнения некоторого слова на стеке находились числа A и B, причем B было сверху. После исполнения (справа от стрелки), эти числа оказались удалены, а на стек было помещено число C. Содержимое стека ниже числа A при этом не изменяется, в противном случае изменения отражаются в стековой нотации. Скобки являются естественным обрамлением для стековой нотации, поскольку таким образом в программу на Форте вводятся комментарии.

Если в результате работы слова состояние стека может изменяться различным образом, возможные варианты записывают через вертикальную разделительную черту (символ «|»).

Итак, рассмотрим группу слов, предназначенных для изменения состояния стека.


Имя Стековая нотация Описание DUP ( A → A, A ) Дублирует верхнее число стека DROP ( A → ) Удаляет верхнее число со стека SWAP ( A, B → B, A ) Меняет местами два верхних числа OVER ( A, B → A, B, A ) Кладет на стек второе сверху число ROT ( A, B, C → B, C, A ) Вращает три верхних числа в соответствии с приведенной стековой нотацией DEPTH ( → A ) Возвращает глубину стека – количество чисел на нем до выполнения слова DEPTH ?DUP ( A → A | A, A ) Если верхнее число стека равно нулю, оставляет стек без изменений, иначе дублирует верхнее число стека.
Можно заметить, что идентичные числа обозначаются в стековой нотации одним и тем же символом. Например, в случае слова DUP видно, что поверх уже существующего числа кладется точно такое же.

Многие реализации Форта поддерживают так называемое расширение ядра (Core Extension). Оно позволяет работать с дополнительными словами:


Имя Стековая нотация Описание NIP ( A, B → B ) Удаляет из стека второе сверху число, сдвигая вершину на его место TUCK ( A, B → B, A, B) Копирует верхнее число на третью сверху позицию PICK ( N → AN ) Копирует на вершину стека N-е сверху число. 0 PICK аналогично DUP ROLL ( AN, ...A0, N → AN-1,... A0 AN ) Вращает N верхних чисел стека. 1 ROLL аналогично SWAP
Хотя слова, приведенные в последней таблице, позволяют проводить со стеком практически любые манипуляции, все же следует иметь в виду, что частые перестановки чисел на стеке свидетельствуют о плохом стиле программирования. Кроме того, манипулирование стеком отнимает дополнительное процессорное время.

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


Имя Стековая нотация Описание RDROP ( R: A → R : ) Удаляет число со стека возвратов R> ( R : A → A) Перемещает число со стека возвратов на стек данных (со стека возвратов число при этом удаляется) >R ( A → R : A) Перемещает число со стека данных на стек возвратов (со стека данных число при этом удаляется) R@ ( R: A → A, R : A ) Копирует число со стека возвратов на стек данных
Буква R в записи R : A означает, что число A находится на стеке возвратов (от Return Stack).

Из приведенной таблицы видно, что программист имеет возможность модифицировать