Программист – Программирование на gforth (страница 9)
THEN
THEN
LOOP
CR ;
Вывод: 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
4. Практические примеры
Пример 1: таблица умножения
: multiplication-table
11 1 DO
CR I . ." : "
11 1 DO
I J * .
LOOP
LOOP ;
Пример 2: поиск простых чисел до N
: prime? ( n -- flag )
DUP 2 < IF
DROP 0
ELSE
DUP 2 = IF
DROP -1
ELSE
DUP SQRT 2 DO
DUP I MOD 0= IF
DROP 0 LEAVE
THEN
LOOP
SWAP DROP
THEN
THEN ;
: primes-up-to ( n -- )
CR ." Простые числа до " DUP . ." :" CR
1+ 2 DO
I prime? IF
I .
THEN
LOOP ;
Проверка:
20 primes-up-to
\ Вывод: Простые числа до 20:
\ 2 3 5 7 11 13 17 19
5. Типичные ошибки
Несбалансированные IF/THEN — компилятор выдаст ошибку.
Отсутствие флага для IF — если перед IF нет значения в стеке, возникнет ошибка.
Бесконечные циклы — проверяйте условие выхода:
BEGIN ." Бесконечность" 0 UNTIL \ Никогда не завершится!
Использование I вне DO LOOP — вызовет ошибку.
Изменение счётчика внутри DO LOOP — не влияет на цикл.
6. Отладка конструкций
Используйте .S для проверки стека перед условиями:
: debug-if
." Перед IF стек: " .S
0= IF ." True" ELSE ." False" THEN
CR ;
Упражнение для закрепления
Запустите Gforth.
Определите слово abs, которое возвращает абсолютное значение числа (используйте IF). Протестируйте: 5 abs . и -5 abs ..
Напишите слово print-evens, которое печатает чётные числа от 2 до 20 (используйте любой цикл).
Создайте слово factorial, вычисляющее факториал числа n (используйте DO LOOP). Проверьте: 5 factorial . (ожидаемый результат: 120).
Реализуйте игру «Угадай число»: компьютер загадывает число от 1 до 10, пользователь вводит предположения. Используйте BEGIN WHILE REPEAT для цикла ввода. Подсказки:
–
для генерации случайного числа используйте
RANDOM
;
–