Начальный курс программирования на языке Форт

         

РАБОТА СО СТЕКОМ


Мы уже продемонстрировали некоторые методы работы со стеком и постфиксную запись. Теперь рассмотрим этот вопрос более детально.

Стек Форта функционирует по принципу «последним занесен первым выбран» (LIFO). Вы это видели в приведенном выше при мере. Число 3 было занесено в стек первым, а затем в него занесли число 4, «протолкнув» вглубь стека тройку. Позднее при выполнении операции сложения машина выбрала первым число 4, так как оно находилось в вершине стека.

В качестве еще одного примера выполним другую операцию. Вспомните, что каждое слово . берет одно значение из стека и выводит его на экран. Четыре точки, следовательно, возьмут четыре числа: 2 4 6 8 . . . .<return> 8 6 4 2 ok

Система читает символы из входного потока слева направо. При вводе крайнее правое значение на экране дисплея будет находиться последним в стеке, т. е. в его вершине. При выводе крайнее правое значение поступает на экран с самого дна стека.

Будьте внимательны, чтобы не допустить ошибки. Наберите на клавиатуре 10 20 30 . . . .

(четыре точки) и нажмите клавишу RETURN. В результате вы получите : 10 20 30 . . . .<return> З0 20 10 . Стек пуст

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

 

Такая ошибка называется потерей элемента стека. (Заметьте, что потеря элемента стека вовсе не «ok».) В противном случае, когда вы исчерпали емкость стека, возникает ситуация его переполнения. Однако стек настолько глубок, что такое событие практически нереально, если только вы не совершите что-то из ряда вон выходящее.

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


1 Для любознательных. На самом деле на экран выводится всегда то значение, которое находится в вершине стека. Поэтому если в стеке ничего нет, выводится следующее значение, находящееся глубже последнего, а именно нуль. И только тогда обнаруживается ошибка. Ошибочное слово (в нашем случае точка) выводится на экран, а за ним — сообщение об ошибке.

при создании буквы F, то для начертания сторон можно написать слово : СТОРОНЫ STAR 5 SPACES STAR 5 ;

которое при выполнении дает вам следующее:  * *

Предположим, вы хотите научиться рисовать прямоугольник любого размера. Тогда вы должны не заключать число 5 в определении, а передавать его слову СТОРОНЫ как аргумент. В этом случае ваше определение будет выглядеть так: : СТОРОНЫ STAR SPACES STAR ;

Теперь нужно обращаться к слову СТОРОНЫ, скажем, таким образом: 5 СТОРОНЫ

При этом несмотря на то, что при первом употреблении слова STAR в стек заносится число 42, предназначенное для EMIT, заданное вами число 5 будет благополучно дожидаться в стеке выполнения своего слова SPACES.


Содержание раздела