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



         

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


Дальше мы узнаем, что существует слово 2DUP, которое выполняет ту же функцию, что и OVER OVER. Имеется целое семейство слов, которые оперируют в стеке парами чисел, но, так как они используются главным образом для операций с так называемыми числами двойной длины, мы их рассмотрим в .

Слово ROT (по-англ. "rotate" -- поворачивать) производит ротацию трех верхних чисел стека, т.е. перекладывает третье сверху число в стеке на его вершину, так что

1 2 3 ROT .8

приводит к

2 3 1 Ok

Третье сверху число в стеке перемещается на вершину стека, а следующие два числа продвигаются на одну позицию в глубь стека. Применения слова ROT поначалу не очевидны, но они также важны. Предположим, что вы хотите определить значение выражения (5+2) х (7+3), если в стеке находится 5 2 7 3.

Для решения введите

+ ROT ROT + х .

и вы получите

70 ok

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

Операция Содержимое стека Содержимое стека Операция
(стек в начале) (до - после) (до - после)
(5 2 7 3 --) + (- 10 7)
+ (-- 5 2 10) х (- 70).
ROT (- 2 10 5) (- стек пуст)
ROT (- 10 5 2)

Если требуется произвести сложные манипуляции в стеке вроде приведенного, составление такой таблицы может оказаться полезным. Наиболее часто возникновение ошибок в определении слова (программы) происходит при манипуляциях в стеке.

В отличие от предыдущих слов PICK требует аргумента -- числа, которое указывает, какое по счету число сверху вы хотите скопировать на вершину стека. Аргументом является номер числа, за начало принимается вершина стека, а счет ведется по направлению в глубь стека. Так, например, в стандарте Форт-79 операции

1 2 3 4 5 6 4 PICK .S

приводят к результату

1 2 3 4 5 6 3 ok

Но в стандарте Форт-83 вы увидели бы

1 2 3 4 5 б 2 ok

Это принципиальное и зачастую очень неудобное различие стандартов Форт-79 и Форт-83.


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