«СЕКРЕТ» ОПЕРАТОРА IF
Мы уже знаем, что IF принимает -1 за истину. Программирующие на Форте часто пользуются тем, что на самом деле IF воспринимает как истину любое ненулевое значение и только нуль кал ложь . Обычно вы над этим не задумываетесь, но бывают ситуации, когда такая реализация представляет интерес.
Так, если вы проверяете некоторое число только на равенство нулю, то операция сравнения вам не нужна. Определение рассмотренного нами слова /ПРОВЕРКА может поэтому принять более прослою форму: : /ПРОВЕРКА ( числитель знаменатель -- результат) DUP IF / ELSE ." Знаменатель нуль " DROP THEN ;
Или, допустим, вам нужно узнать, является ли некоторое число в точности кратным десяти, например 10, 20, 30, 40 и т, д. Как известно, выражение 10 MOD
осуществляет деление на 10 и возвращает только остаток. А при вычислении кратного в остатке должен быть нуль, поэтому выражение 10 MOD 0=
соответствует флагу «истина» или «ложь».
1 Для сомневающихся. Чтобы проверить это, введите следующий текст:
: ТЕСТ ( ? ) IF ." He нуль " ELSE ." Нуль " THEN ;
Даже несмотря на то, что в данном определении нет операции сравнения, вы получите такой результат:0 ТЕСТ Нудь ок
1 ТЕСТ Не нуль oк 8000 ТЕСТ Не нуль ok
Далее, слово — (минус) вы зачастую можете использовать в качестве операции сравнения, чтобы проверить на равенство два значения. Если вы выполняете операцию вычитания над двумя одинаковыми числами, то получаете нуль (ложь), но если при вычитании числа не равны, то вы получаете не нулевое значение (истину). В некоторых Форт-системах по этой причине отсутствует слово <>. Тем не менее <> не только более удобно, чем «не равно», но и оставляет на вершине стека в качестве истинного значения отрицательную единицу. Как вы увидите в гл. 7, операция сравнения имеет свои достоинства (в сравнении с арифметическим вычитанием).