Программист – Программирование на gforth (страница 8)
2. Циклы в Gforth
Тип 1: BEGIN UNTIL — цикл с постусловием (выполняется, пока условие ложно)
BEGIN тело-цикла условие UNTIL
Пример: счётчик от 1 до 5
: count-to-5
1
BEGIN
DUP . SPACE
1+
DUP 5 >
UNTIL
DROP ;
Вывод: 1 2 3 4 5
Тип 2: BEGIN WHILE REPEAT — цикл с предусловием
BEGIN условие WHILE тело-цикла REPEAT
Пример: печать чисел, пока они меньше 5
: print-while-less-5
1
BEGIN
DUP 5 <
WHILE
DUP . SPACE
1+
REPEAT
DROP ;
Вывод: 1 2 3 4
Тип 3: DO LOOP — счётный цикл
верхняя-граница нижняя-граница DO тело-цикла LOOP
•
I
— текущее значение счётчика;
•
LEAVE
— досрочный выход из цикла.
Пример: сумма чисел от 1 до 10
: sum-1-to-10
0
11 1 DO
I +
LOOP ;
Проверка:
sum-1-to-10 . \ Вывод: 55
Пример с LEAVE: поиск первого числа > 5
: find-first-gt-5
6 1 DO
I . SPACE
I 5 > IF ." Найдено!" LEAVE THEN
LOOP
CR ;
Вывод: 1 2 3 4 5 6 Найдено!
3. Вложенные конструкции
Можно комбинировать условия и циклы:
: fizzbuzz
16 1 DO
I 15 MOD 0= IF
." FizzBuzz "
ELSE
I 3 MOD 0= IF
." Fizz "
ELSE
I 5 MOD 0= IF
." Buzz "
ELSE
I .
THEN