Учебное пособие по языку ФОРТ
- Автор: ИТФ «Технофорт»
- Жанр: Современные российские издания / Литература ХX века (эпоха Социальных революций) / Программирование: прочее / Forth
- Дата выхода: 1993
Читать книгу "Учебное пособие по языку ФОРТ"
11. Условное исполнение
При определении нового слова могут потребоваться знакомые Вам из других языков конструкции, организующие условное и циклическое исполнение. Имеются и соответствующие логические величины, принимающие традиционные значения "ИСТИНА" и "ЛОЖЬ". Эти значения представлены целыми числами, причем "ИСТИНА" соответствует числу -1 (двоичные разряды этого числа состоят из 16 единиц), а "ЛОЖЬ" соответствует числу 0 (16 двоичных нулей).
Логические значения получаются при выполнении специальных слов, предназначенных для сравнения чисел.
Слова арифметического сравнения:
> ... a b --> ... a>b т. е. при a>b ИСТИНА
иначе ЛОЖЬ
< ... a b --> ... a<b
= ... a b --> ... a=b
0= ... a --> ... a=0
0> ... a --> ... a>0
0< ... a --> ... a<0
Над логическими значениями можно совершать логические операции, описанные в п.4. Для того, чтобы можно было эффективно их использовать, управляющие конструкции на самом деле воспринимают числа из стека как логические значения таким образом:
0 — это "ЛОЖЬ", любое другое значение — "ИСТИНА".
Для организации условного исполнения в языке Форт предусмотрены слова "IF", "ELSE" и "THEN". Они используются в постфиксной форме в конструкциях:
IF <часть-if> ELSE <часть-else> THEN
и
IF <часть-if> THEN
Слово "IF" берет из стека логическое значение, и в случае, если это "ИСТИНА", исполняет текст <часть-if>; в противном же случае исполняется <часть-else>, если она есть. Дальше управление передается на текст, следующий за "THEN". Заметим, что использование управляющих слов требует состояния компиляции; то есть их можно применять только в определениях новых слов и при этом ЦЕЛИКОМ ВНУТРИ ОДНОГО определения.
Пример. Стандартное слово "ABS" можно было бы определить так:
: ABS ( ... a --> ... |a| )
DUP 0<
IF NEGATE THEN ;
Пример другой конструкции разберите сами и постарайтесь улучшить:
: MAX ( ... a b --> max{a,b} )
2DUP > IF DROP ELSE SWAP DROP THEN ;
Слово "MAX" и аналогичное ему "MIN" входят в стандарт языка Форт.
Конструкции условного исполнения теоретически могут быть любой степени вложенности; ограничения зависят от конкретной Форт-системы; контроль за скобочными соответствиями "IF", "ELSE" и "THEN" оставлен за программистом.