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

         

ДВА СЛОВА С ВСТРОЕННЫМИ ОПЕРАТОРАМИ IF


DUP

Слово ?DUP дублирует вершину стека только в том случае, если там находится нулевое значение. Это помогает избавиться от лишних слов. Например, определение : ?EMIT ( с -- ) DUP IF EMIT ELSE BROP THEN ;

выдает на печать символ с любым кодом (кроме 0) Применяя ?DUP, можно сократить наше определение:: ?EMIT ( с -- ) ?DUP IF EMIT THEN ;

ABORT"

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

Если вы предполагаете, что подобная ошибка может произойти, можно воспользоваться оператором аварийного прекращения выполнения задачи ABORT". Этот оператор проверяет значение флага я вершине стека и в случае его истинности прерывает вычисления. Оператор очищает стек и возвращает управление на терминал до поступления какого-либо сообщения. Оператор ABORT" также выводит имя последнего слова, обработанного текстовым интерпретатором, и предусмотренное вами для такой ситуации сообщение1.

 

Проиллюстрируем изложенное примером:: /ПРОВЕРКА ( числитель -знаменатель — результат) DUP 0= ABORT" Знаменатель нуль " / ;

Р этом определении, если знаменатель равен нулю, то любое оказавшееся в вершине стека, удаляется из последнего, а на терминал выводится сообщение:8 0 /ПРОВЕРКА /ПРОВЕРКА Знаменатель нуль

Теперь в порядке эксперимента попытайтесь поместить слово /ПРОВЕРКА внутрь другого определения: : ОБОЛОЧКА /ПРОВЕРКА ." Ответ равен " . ;

1 Для профессионалов. В Форте, кроме того, имеются слова. QUIT (ОКОНЧИТЬ), которое вызывает прекращение работы программы, но не очищает стек, и ABORT (ПРЕРВАТЬ), которое выполняет те же действия, что и QUIT, очищает стек но не выводит сообщение Мы рассмотрим эти слова в гл 9

и введите 8 4 ОБОЛОЧКА Ответ равен 2 Ок 8 0 ОБОЛОЧКА ОБОЛОЧКИ Знаменатель нуль



Обратите внимание на то, что когда слово /ПРОВЕРКА аварийно прерывает работу с помощью оператора ABORT", оставшаяся часть ОБОЛОЧКА пропускается.
Заметьте также, что выводится имя ОБОЛОЧКА, а не /ПРОВЕРКА.

Ниже приводится перечень слов Форта, рассмотренных в настоящей главе.IF xxx IF: ( ? -- ) Выполнение ххх, вели ? истинно (не EL5E yyy нулевое значение) , и yyy, - если ? THEN zzz ложно, zzz выполняется независимо от выбранного варианта. Выражение ууу является необязательным.

== ( n1 n2 -— ? ) Занесение в стек истины если n1 и n2 равны.

<> ( n1 n2 -- ? ) Занесение в стек истины, если n1 и п2 не равны.

< ( n1 n2 -- ? ) Занесение в стек истины, если n1 меньше n2.

> ( n1 n2 -- ? ) Занесение в стек истины, если n1 больше n2.

0= ( n -- ? ) Занесение в стек истины, если n является нулем (то есть истина меняется на ложь и наоборот).

0< ( n -- ? ) Занесение в стек истины, если n отрицательно.

0> ( n -- ? ) Занесение в стек истины, если n положительно.

NOT ( ? -- ? ) Изменение значения флага на противоположное.

AND ( n1 n2 -- И ) Доставление логического значения, согласно таблице операции AND.

OR ( n1 n2 -- ИЛИ) Занесению в стек логического значения, согласно таблице операции OR.

XOR ( n1 n2 -- Занесение в стек логического знамения, ИСКЛЮЧ-ИЛИ ) согласно таблице операции XOR.

?DUP ( n -- n n ) или Дублирование вершины стека только в том слу- ( 0 -- 0 ) чае, если n является ненулевым значением.

ABORT" ххх" ( ? -- ) Если значение флага истинно, то вывод последнего проинтерпретированного слова и за ним заданного текста. Кроме этого очищает стеки пользователя и возвращается управление на терминал. Если в стеке ложь, то не предпринимается никаких действий.

Обозначения: n,n1 ... 16-раэрядные числа со знаком. ? - логическое значение (флаг)


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