Язык Форт и его реализации

         

Структуры управления - часть 4


Для организации циклов с целочисленной переменной — счетчиком цикла — используются слова

DO A,B ---> (исполнение) LOOP ---> (исполнение) +LOOP A ---> (исполнение) I ---> A (исполнение) J ---> A (исполнение) LEAVE ---> (исполнение)

Такие циклы записываются в одной из следующих двух форм: DO <тело> LOOP или DO <тело> +LOOP. В обоих случаях цикл начинается словом DO (делать), которое снимает со стека два значения: начальное (на вершине стека) и конечное (второе сверху) — и запоминает их. Текущее значение счетчика полагается равным начальному значению, после чего исполняются слова, составляющие тело цикла. Слово LOOP увеличивает текущее значение счетчика на единицу и проверяет условие завершения цикла. В отличие от него, слово +LOOP прибавляет к текущему значению счетчика значение шага, которое вычисляется на стеке телом цикла и рассматривается как число со знаком. В обоих случаях условием завершения цикла является пересечение границы между A–1 и A при переходе от прежнего значения счетчика к новому (направление перехода определяется знаком шага), где A — конечное значение, снятое со стека словом DO.

Если пересечения не произошло, то тело цикла исполняется вновь с новым значением счетчика в качестве текущего.

Такое определение позволяет рассматривать исходные параметры цикла (начальное и конечное значения) и как числа со знаком, и как числа без знака (адреса). Например, текст 10 0 DO <тело> LOOP предписывает выполнять тело цикла 10 раз со значениями счетчика 0, 1, 2, ..., 9, а в случае 0 10 DO <тело> LOOP тело цикла будет исполнено 65 526 раз со значением счетчика 10, 11, ..., 32767, -32768, -32767, .... -1 или (что то же самое) со значениями счетчика 10, 11, ..., 65535. В то же время цикл 0 10 DO <тело> -1 +LOOP будет исполняться 11 раз (а не 10) со значениями счетчика 10, 9, ..., 0, поскольку пересечение границы между -1 и 0 произойдет при переходе от значения счетчика 0 к следующему значению — -1.


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