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



         

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


В этом случае что-то должно быть сделано или не сделано в зависимости от того, находится ли в стеке нуль или не нуль. Сочетание ELSE DROP необходимо для того, чтобы убрать из стека нуль, порожденный оператором DUP. В подобных случаях очень полезно слово ?DUP, поскольку оно кладет в стек копию числа только в том случае, когда оно не равно нулю, заменяя два слова ELSE DROP. Вот, например, короткое определение слова ?22-MULTIPLE (кратно ли 22?): : ?22-MULTIPLE 22 MOD ?DUP IF DOIT THEN ;

Если в стеке находится нуль, слово ?DUP ничего не выполняет, следовательно, применяя его, мы избавляемся от заботы очищения стека от оставленного нуля. ?DUP не дает никакого выигрыша, если перед оператором IP стоит оператор сравнения. Но если перед IF следовала арифметическая операция и при ненулевом значении результата должна быть выполнена другая программа, тогда использование ?DUP экономит время - особенно в цикле. Применение оператора MOD совместно с IF весьма полезно в циклах DO-LOOP, когда нужно что-то выполнить с определенным интервалом. Например, : 7MULTIPLES? 1+ 0 SWAP 1 DO I 7 MOD 0= IF 1+ THEN LOOP . ." раз число 7 содержится в данном числе " CR ; при исполнении 38 7MULTIPLES? выведет в результате 5 раз число 7 содержится в данном числе

Хотя данный пример тривиален, в нем показан прием, который пригодится для составления более сложных программ, чем определение кратности одного числа другому.

Некоторые замечания о структурном программировании

Переход на исполнение определенных операций (т.е. подпрограмм) является одним из наиболее важных механизмов языка программирования. В таких языках, как Бейсик, допускается переход в любое место программы, куда вы хотите, не обязательно к четко оформленной задаче или подпрограмме. И возврат не обязательно должен происходить в точку, из которой произошел переход. Оператор Бейсика GOTO nnn где nnn - номер строки, позволяет делать переход в программе произвольно, с возвратом или без возврата в исходную точку, как вам кажется удобнее.


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