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



         

Глава 7. Операторы сравнения и ветвления - часть 2


Если числа не равны, то говорят, что условие ложно, при этом во всех версиях Форта в стек возвращается 0. Величина, возвращаемая в стек оператором сравнения, называется значением истинности, булевым флагом или просто флагом. В языке Форт любое ненулевое число всегда считается истинным и 0 всегда ложным. В данном случае если перед IP находится истинное (ненулевое) значение, то исполняются слова, находящиеся между оператором IF и ELSE, слова между ELSE и THEN пропускаются и затем продолжается исполнение той части, которая следует за словом THEN. Если перед IF находится ложное значение (0), исполнение перескакивает на слово, которое следует после ELSE и продолжается до слова THEN.

На рис. 7.1 проиллюстрирована эта идея. Обратите внимание, что конструкции IF-THEN и IF... ELSE... THEN могут быть использованы только в определениях через двоеточие. Вскоре мы более подробно обсудим конструкцию IF...ELSE...THEN, а пока познакомимся с некоторыми другими операторами сравнения.

Проверка истинности

Теперь кратко остановимся на булевом флаге. То, что в Форт-83 (и других языках) оператор сравнения возвращает значение флага -1, а не 1, имеет определенное основание. При обнаружении истинности условия число -1 или шестнадцатеричное FFFF, т.е. содержащее во всех разрядах единицы, оказывается иногда более удобным для использования его с булевскими операциями. Предположим, например, что требуется заменить число нулем, если флаг имеет значение ложь, и оставить без изменения, если флаг имеет значение истина. Если числа находятся в стеке, причем флаг на вершине, то оператор AND ("И") выполнит эту задачу в Форт-83, но не в Форт-79, для которого потребуется конструкция 0 = IF DROP 0 THEN

Хотя подобные случаи не так уж часты, иногда программа может дать выигрыш по времени, пользуясь этой особенностью флага. (При необходимости вспомните действие оператора AND в гл. 3.) Если посмотреть с более общих позиций, то в Форт-83 значение истина имеет не только сам флaг, но и каждый его разряд, что может оказаться полезным при операциях поразрядного сравнения.


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