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


РЕКОМЕНДАЦИИ ПО ПРИМЕНЕНИЮ ОПЕРАТОРА DO В СТИЛЕ ФОРТА


Как уже отмечалось, слова DO и LOOP являются операторами управления и, следовательно, должны быть выполнены в пределах одного определения. Это означает, что вы не можете выполнить отладку определений, содержащих цикл, в режиме калькулятора, за исключением тех случаев, когда вы моделируете цикл сами.

Рассмотрим, каким образом «оперившийся» программист может заняться отладкой определения СЛОЖНЫЕ-ПРОЦЕНТЫ (из первого раздела настоящей главы). Прежде чем добавить сообщения ." , программист может кратко записать такой вариант на листе бумаги: : СЛОЖНЫЕ-ПРОЦЕНТЫ ( вклад процент — ) SWAP 21 1 DO CR I . 2DUP R% + DUP . LOOP 2DROP ;

Он может вести отладку этого варианта за терминалом, используя . или .S для проверки результата на каждом шаге цикла. Такой «диалог» выглядит следующим образом:

При моделировании мы не используем фразы "граница счетчик DO", "I" и "DUP".1000 6 SWAP .S<return>

6 1000 ok 2DUP .S<return> Шаг 1

6 1000 6 1000 ok R% .S<return>

6 1000 60 ok

+ .S<return>

6 1060 ok 2DUP R% + .S<return>

6 1124 ok 2DROP .S<return> Шаг 2

Стек ПУСТ ok

Цикл отлажен. Считая, что выполнен последний шаг, проверяем, не пуст ли стек.

Полезный прием. Как очистить стек и при этом эмоционально разрядиться. Иногда начинающий программист может случайно написать цикл, который после себя оставляет в стеке множество значений, например:

: ПЯТЕРКИ ( -- ) 100 0 DO I 5 . LOOP ;

вместо

: ПЯТЕРКИ ( — ) 100 0 DO I 5 * . LOOP ;

Если вы увидите, что кто-то попал в такую ситуацию (с вами-то, конечно, подобное никогда не произойдет), и, для того чтобы очистить стек, набирает бесконечную последовательность точек, посоветуйте ему не делать этого, а несколько раз наугад ударить по клавиатуре и нажать клавишу возврата каретки. В результате получится что-нибудь типа

ASDFKJ

что, естественно, не является словом Форта и приведет к тому, что текстовый интерпретатор вызовет ABORT, который, помимо всего прочего, почистит оба стека. (Но объясните новичку, что не нужно бить по клавишам при каждой ошибке.)




Начало  Назад  Вперед