Циклы DO LOOP

 
+
-
edit
 

Balancer

администратор
★★★★★
Формат вызова:
code forth
  1. ...
  2. DO
  3.    ...
  4.    ...
  5. LOOP
  6. ...


Перед словом DO на стек кладутся конечное и начальное значение цикла. Эти числа при выполнении слова DO снимаются со стека (и кладутся на стек возврата - но это в стандарте не оговаривается)

Тело цикла выполняется хотя бы один раз.

Слово LOOP увеличивает на единицу переменную цикла, сверяет с конечным значением, и если занчения точно равны - завершает цикл. Иначе - повторяется тело цикла.

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

Для избегания зацикливания, при возможном наличии на входе равных переменных, есть слово ?DO - полный аналог DO, за исключением дополнительной проверки. Если числа на старте равны, то цикл не выполняется ни разу.

Для работы с шагом цикла отличным от +1 существует слово +LOOP

Ему на вход требуется положить на стек шаг цикла. Шаг цикла может быть и отрицательным. Значения в конце цикла не обязательно должны совпасть - выход из цикла осуществляется, когда пересекается граница конечного значения.

Считать переменную цикла можно словом I


code forth
  1. : test
  2.         5 0 DO I . LOOP  распечатает 0 1 2 3 4
  3.         0 0 ?DO I . LOOP  ничего не делает
  4.         10 0 DO I . 2 +LOOP  распечатает 0 2 4 6 8
  5.         10 0 DO I . 3 +LOOP  распечатает 0 3 6 9
  6.         -10 0 DO I . -1 +LOOP  распечатает 0 -1 -2 -3 -4 -5 -6 -7 -8 -9
  7. ;
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru