реклама
Бургер менюБургер меню

Программист – Программирование на gforth (страница 5)

18

10 20 30 \ Помещаем три числа в стек

.S \ Выводит: 10 20 30 <3> ok

SWAP \ Меняем местами 20 и 30

.S \ Выводит: 10 30 20 <3> ok

DROP \ Удаляем верхний элемент (20)

.S \ Выводит: 10 30 <2> ok

Упражнение для закрепления

Запустите Gforth.

Выполните в интерактивном режиме вычисление: . Проверьте результат командой .S.

Определите слово triple, которое утраивает число (умножает на 3). Протестируйте его на числе 7.

Определите слово average-of-two, которое вычисляет среднее арифметическое двух чисел. Протестируйте на числах 10 и 20 (ожидаемый результат: 15).

Используйте SEE для просмотра определения слова double из примера выше.

Создайте файл math-utils.fs и сохраните в него определения слов triple и average-of-two. Загрузите файл в Gforth командой include math-utils.fs и проверьте работу слов.

Подсказки: * Определение triple:

: triple ( n -- 3n ) 3 * ;

Определение

average-of-two

:

: average-of-two ( a b -- avg ) + 2 / ;

Если у вас возникли трудности, проверьте: * правильность расстановки пробелов между словами; * соответствие количества операндов для операторов; * наличие ; в конце определения слова.

Глава 4. Работа со стеком: углублённое изучение

Стек — фундаментальная концепция в Forth. В этой главе мы детально разберём продвинутые операции со стеком, типичные ошибки и приёмы эффективной работы.

1. Основные операции со стеком (повторение и расширение)

Напомним базовые команды и добавим несколько новых:

DUP

— дублирует верхний элемент;

DROP

— удаляет верхний элемент;

SWAP

— меняет местами два верхних элемента;

OVER

— копирует второй элемент на вершину;

ROT

— поворачивает три верхних элемента (нижний поднимается на вершину);

2DUP

— дублирует два верхних элемента;

2DROP

— удаляет два верхних элемента;

NIP

— удаляет второй элемент (оставляет верхний);

TUCK

— копирует верхний элемент и помещает его на второе место (аналог

SWAP OVER

);

PICK

— копирует n‑й элемент на вершину (индекс отсчитывается от 0);

ROLL

— перемещает n‑й элемент на вершину и сдвигает остальные.

Пример использования PICK и ROLL:

1 2 3 4 \ Стек: [1, 2, 3, 4]

2 PICK . \ Копирует элемент с индексом 2 (это 2) → выводит 2

.S \ Стек не изменился: 1 2 3 4 <4> ok

2 ROLL . \ Перемещает элемент с индексом 2 на вершину → выводит 2