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



Слова для манипуляций в стеке


Каждое из слов, приведенных в , рассматривается в этом разделе самостоятельно. В конце раздела мы приводим несколько задач на употребление этих слов, которые будут полезны для совершенствования ваших навыков в их использовании.

Прежде чем продолжить описание приведенных в таблице слов, обратим внимание на обозначения в скобках. Как вы уже видели в , в Форте принято применять такие обозначения (они называются диаграммой состояния стека), чтобы показать состояние стека до и после применения какого-либо слова. Правило хорошего тона -- помещать такую диаграмму сразу после имени определяемого слова. Поскольку все, что заключено с двух сторон в скобки (если только после открывающей скобки стоит пробел). Форт при вводе игнорирует, скобки можно использовать для помещения комментариев к Форт-словам. Вот, например, определение слова для сложения двух чисел и умножения на третье число:

: +* (n1 n2 n3 -- п) + * :

Таблица 2.1. Перечень слов для манипуляций в стеке

Слово Состояние стека ( до - после ) Действие
DROP ( n - ) Очищает вершину стека
DUP ( n - n n ) Делает копию числа на вершине стека
SWAP ( n1 n2 - n2 n1 ) Переставляет местами два числа
OVER ( n1 n2 - n1 n2 n1 ) Копирует второе число на вершину
ROT ( n1 n2 n3 - n2 n3 n1 ) Перекладывает третье число на вершину
n PICK ( n1 ... - n1 ... n1 ) Кладет на вершину копию п-го элемента
n ROLL ( n1 ... - ... n1) Перекладывает п-й элемент на вершину
?DUP ( n - n n ) или ( 0 - 0 ) Выполняет операцию DUP, если n == 0
DEPTH ( ... - n ) Возвращает в стек n -- число элементов

Если мы вводим 3 4 5 + *, то до того, как слово будет исполнено, n1=3, n2=4, n3=5. После операции умножения в стеке находится n, которое имеет значение 27. Перечень принятых обозначений для содержимого стека приведен в .

Таблица 2.2. Обозначения для содержимого стека

Символ Значение
n, n1 , 16-разрядное целое число одинарной длины
d,d1, . . . 32-разрядное целое число двойной длины
U 16-разрядное число без знака одинарной длины
ud 32-разрядное число без знака двойной длины
char или с 7-разрядное представление кода символа ASCII
byte или Ь 8-разрядное число, байт
флаг или f 1 или 0 - булев флаг
адр, адр1 Адреса
$ или $адр Адрес, где находится строка символов
<


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