НЕМНОГО ЛОГИКИ
Форт (как и большинство языков программирования) дает вам возможность комбинировать флаги. Возьмем, к примеру, комбинацию по принципу «или». Даны значения двух флагов. Если хотя бы одно из них истинно, то Форт-система выполнит действие, если оба значения ложны — не выполнит.
Поясним изложенное на следующем примере/Допустим, вы хотите вывести имя АРТИШОК в том случае, если исходное число либо отрицательно, либо кратно 10. Как это сделать на Форте? Рассмотрим выражение:
Ниже приводятся значения, которые получаются при исходном значении, скажем равном 30:
Флаги логически складываются? Что же происходит при таком сложении флагов? Вы получаете в результате истину, если хотя бы один из флагов (или сразу оба) истинны. Ниже приводятся четыре возможных сочетания двух флагов и результаты операции OR (ИЛИ) над ними.
Определение в нашем простом примере, следовательно, будет выглядеть так: : ОВОЩ ( n) DUP 0< SWAP 10 MOD 0= OR IF ." Артишок " THEN ;
Ниже приводится улучшенный вариант приведенного выше оп-ределения слова ?ДЕНЬ. Предыдущее определение браковало только элементы, значение которых превышало 31, а отрицатель-ные значения не допускались вовсе. : ?ДЕНЬ ( день) DUP 1 < SWAP 31 > OR IF ." Ошибка " ELSE ." Спасибо " THEN ;
(Во многих Форт-системах для таких случаев предусмотрено слово WITHING (В ИНТЕРВАЛЕ). См. вопросы в конце главы.)
Другой комбинацией флагов является комбинация по принципу И. Здесь для получения истины оба флага должны быть истинны. Например, чтобы сделать сквозняк, нужно открыть обе двери: входную И выходную. Сравните с комбинацией ИЛИ: если входная ИЛИ выходная дверь (или сразу обе) будут открыты, то налетят мухи1.
Форт включает слово AND (И), Ниже приводится таблица результатов операции AND над двумя флагами:
1 Для любознательных и начинающих. Применение слов, аналогичных «или»' и «и», при создании некоторых фрагментов прикладных программ называется логикой. Нотация для логических операций была разработана в XIX в. Дж. Булем.
Этот раздел математики теперь называют булевой алгеброй. Таким образом, термин «булевский флаг» (или даже «булевская переменная») просто обозначает флаг, который будет использован в логической операции.
Иными словами, только пара значений «истина» дает в результате истину.
Допустим далее, что мы подбираем картонный ящик для дисковода, имеющего следующие параметры: высота — 6 дюймов, ширина — 19 дюймов, длина — 22 дюйма. Для того чтобы дисковод поместился в ящик, должны быть выдержаны все параметры: и высота, и ширина, и длина. Если параметры ящика заданы в стеке, то можно написать следующее определение: : ОБЪЕМ ( длина ширина высота -- ) 6 > ROT 22 > ROT 19 > AND AND IF ." Подходит " THEN ;
Проверить слово ОБЪЕМ можно следующей фразой:23 20 7 ОБЪЕМ Подходит ок
Третий вид комбинации флагов называется исключающим ИЛИ. В Форте эта операция выполняется словом XOR. Результат получается истинным только в тех случаях, когда хотя бы один из флагов истинен, но не оба сразу.
Ниже приводится пример применения такой операции. Слово ?ЗНАКИ выбирает из стека два числа. Если их знаки совпадают (оба числа положительны или оба отрицательны), то выдается сообщение «Знаки совпадают», в противном случае выдается сообщение «Знаки разные»:: ?ЗНАКИ ( nl n2 — ) 0< SWAP 0< XOR IF ." Знаки разные " ELSE ." Знаки совпадают • THEN ;
По мере усложнения ваших прикладных программ вы можете писать операторы Форта в виде текста на естественном языке в постфиксной форме, что очень легко читается. Только определите где-нибудь отдельные слова, находящиеся внутри определения, которые будут проверять некоторое условие и оставлять в стеке флаг. Следующий пример: вам предстоит выполнить фотосъемку, но прежде необходимо проверить освещенность И наличие пленки в фотоаппарате:: ФОТОСЪЕМКА ?СВЕТ ?ПЛEHKA AND IF СНИМОК THEN ;
Другой фрагмент, который мажет быть использован в программе обработки данных:: СЛУЖБА-ЗНАКОМСТВ C-ЮМОPOM ОТЗЫВЧИВЫЙ AND ЛЮБИТ-ИСКУССТВО ЛЮБИТ-МУЗЫКУ OR AND КУРИТ NOT AND IF ." У нас имеется подходящая для вас кандидатура " THEN ;
Здесь такие слова, как С-ЮМОРОМ и ОТЗЫВЧИВЫЙ, предназначены для выполнения проверки записи из дискового файла, содержащего информацию о возможных партнерах.
Обращаем ваше внимание на то. что до тех пор, пока мы не oбясним некоторые тонкости использования слов NOT, OR, AND, и XOR, их следует применять только с аргументами, являющимися логическими флагами, т.е. с нулем или отрицательной единицей. Все рассмотренные выше операции сравнения (за исключением операции « — », применяемой вместо «не равно») оставляют в стеке логические флаги Поэкспериментируйте, чтобы посмотреть, как выполняются команды NOT, OR, AND и XOR с числами, отличными от 0 и -1