ЦИКЛЫ СО СЧЕТЧИКОМ
Одна из циклических структур называется циклом со счетчиком. Здесь вы сами определяете число повторений цикла. На Форте для этого нужно задать начальное и конечное числа перед словом DO (в обратном порядке), а затем поместить слова, выполнение которых вы хотите повторять, между словами DO (ВЫПОЛНИТЬ) и LOOP (ЦИКЛ). Например:
: ТЕСТ 10 0 DO CR ." ПРИВЕТ " LOOP ;
будет осуществлять возврат каретки и выводить слово ПРИВЕТ десять раз, потому что, если вычесть нуль из 10, вы получите 10.
ТЕСТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ ПРИВЕТ
Как и оператор IF ... THEN, относящийся к операторам управления, оператор DO ... LOOP должен размещаться в пределах (одного) определения. Число 10 в приведенном примере называется границей цикла (limit), а нуль — индексом (index). Общий вид оператора цикла со счетчиком: граница индекс DO ... LOOP
Теперь посмотрим, что происходит внутри цикла DO ... LOOP:
Слово DO1 берет из стека данных границу и индекс и подготавливает их для слова LOOP, которое по этим данным будет управлять циклическим процессом.
Далее выполняются слова, находящиеся внутри цикла.
1 Единоутробный братец птички ДОДО.
Получив управление, LOOP продвигается на единицу, после чего управление возвращается к DO. Когда LOOP «пересекает» финишную черту, электронный глаз переключает стрелку, разрешая тем самым выполняться операторам, следующим за словом LOOP.
Слово I помещает в стек данных текущее значение индекса (значение, на котором в этот момент стоит LOOP) на каждом шаге циклического процесса. Рассмотрим определение : ДЕКАДА 10 0 DO I . LOOP ;
которое выполняется так, как показано ниже: ДЕКАДА 0 1 2 3 4 8 6 7 8 9 ok
Заметьте, что цикл выполняется всего 10 раз — от 0 до 9. Мы не добираемся до 10, потому что LOOP пересекает границу в тот момент, когда 9 сменяется числом 10.
Вы можете выбрать любые числа, но так, чтобы значение границы превышало значение индекса: : ПРИМЕР -243 -250 DO I . LOOP ; ПРИМЕР -250 -249 -24B -247 -246 -245 -244 ok
И в этом примере значение границы (-243) больше, чем начальный индекс (-250).