Язык Форт и его реализации


         

Структуры управления - часть 2


Если логическое значение, снимаемое со стека словом IF, ИСТИНА, то выполняются слова, составляющие часть «то», а если ЛОЖЬ, то данный оператор не выполняет никаких действий. Обратите внимание, что условие для слова IF вычисляется предшествующими словами.

Для примера рассмотрим определение слова ABS, вычисляющего абсолютное значение числа:

: ABS ( A --->абс A) DUP 0< IF NEGATE THEN ;

Слово DUP дублирует исходное значение, следующее слово 0< проверяет его знак, заменяя копию на логическое значение — результат проверки. Слово IF снимает со стека этот результат, и если это ИСТИНА, то лежащее на стеке исходное отрицательное значение словом NEGATE заменяется на противоположное.

Еще пример: стандартное слово ?DUP дублирует верхнее значение, если это не ноль, и оставляет стек в исходном состоянии, если на вершине ноль:

: ?DUP ( A ---> A,A/0 ) DUP IF DUP THEN ;

В спецификации данного слова косая черта разделяет два варианта результата, который это слово может оставить на стеке. Примером использования полного условного оператора может служить определение слова S>D, расширяющего исходное значение до значения двойной длины распространением знакового разряда:

: S>D ( A ---> AA ) DUP 0< IF -1 ELSE 0 ТНЕN ;

Это слово добавляет в стек -1, если число на вершине стека отрицательно, или 0 в противном случае. Таким образом, выполняется распространение знакового разряда на старшую половину значения двойной точности.

В стандарт языка Форт включены циклы с условием и циклы со счетчиком. Циклы первой группы образуются с помощью слов

BEGIN ---> (исполнение) UNTIL A ---> (исполнение) WHILE A ---> (исполнение) REPEAT ---> (исполнение)

и имеют две формы:

BEGIN <тело> UNTIL BEGIN <тело-1> WHILE <тело-2> REPEAT

В обоих случаях цикл начинается словом BEGIN (начать), которое служит открывающей скобкой, отмечающей начало цикла, и во время счета не выполняет никаких действий.

Цикл BEGIN-UNTIL называется циклом с проверкой в конце.


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