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



         

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


Конструкции IF...THEN могут быть вложенными, т.е. их можно использовать внутри таких же конструкций. В слове WT мы классифицировали значения, пользуясь делением на 100 (/) и последующим векторным исполнением. Можно сделать то же, применяя оператор IF. Пусть, если вес меньше 100 г, должна выполняться задача 1TASK, если вес от 100 до 200 г - задача 2TASK, и задача 3TASK, если вес от 200 до 300 г. Можно сделать так; : (WT) DUP 100 < IF 1TASK ELSE DUP 200 < IF 2TASK ELSE DUP 300 < IF 3TASK THEN THEN THEN DROP ;

Метод векторного исполнения с операцией деления на 100 может показаться более изящным, но он не намного быстрее и, кроме того, не будет работать, если разбросы веса в каждой группе неодинаковы. Заметьте, что в данном случае мы использовали как IF...THEN, так и IF...ELSE...THEN конструкции. Первые два оператора IF нужно использовать с ELSE, потому что, если условия ложны, число должно переходить в следующий класс с большими значениями веса. А так как слово (WT) является частью слова WT, третий оператор IP используется без ELSE, потому что число больше 300 быть не может. Немного дальше мы покажем, что можно также применить конструкцию выбора одной из нескольких возможностей (переключатель).

Некоторые программисты строго придерживаются манеры выделять вложенные операторы IF...THEN, подчеркивая их вложенность, поэтому запись определения (WP) в предыдущем примере вызовет у них возражение, так как она плохо сформатирована, и они отдадут предпочтение такой форме записи: : (WT) DUP 100 < IF 1TASK ELSE DUP 200 < IF 2TASK ELSE DUP 300 < IF 3TASK THEN THEN THEN DROP ; Решайте сами, стоит ли ради наглядности программы занимать больше места на диске.

Вот еще один пример. Пусть нужно выполнить операцию D0IT, используя остаток от деления на 22 только тогда, когда число в стеке не кратно 22, т.е. если n 22 MOD возвратит в стек ненулевое значение. Вот как это можно сделать : : ?22-MULTIPLE 22 MOD DUP IF DOIT ELSE DROP THEN ;

Часто функция оператора IF может быть успешно выполнена без оператора сравнения.


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