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

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

18

— дублирует верхний элемент стека.

DROP

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

SWAP

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

OVER

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

ROT

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

.S

— выводит содержимое стека (для отладки).

.

(точка) — выводит верхний элемент и удаляет его из стека.

Пример работы со стеком:

5 10 \ Стек: [5, 10]

DUP \ Стек: [5, 10, 10]

SWAP \ Стек: [5, 10, 10] → [5, 10, 10] (меняет 10 и 10 — без изменений)

DROP \ Стек: [5, 10]

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

3. Арифметические операции

Все арифметические операторы работают со стеком. Они берут операнды из стека и помещают результат обратно.

Основные операторы: * + — сложение; * - — вычитание; * * — умножение; * / — деление (целочисленное); * MOD — остаток от деления; * /MOD — одновременно частное и остаток (помещает оба значения в стек).

Примеры:

3 5 + . \ 3 + 5 = 8 → выводит 8

10 3 - . \ 10 - 3 = 7 → выводит 7

4 6 * . \ 4 × 6 = 24 → выводит 24

15 4 / . \ 15 ÷ 4 = 3 (целочисленное) → выводит 3

15 4 MOD . \ 15 mod 4 = 3 → выводит 3

Порядок операций. В постфиксной нотации порядок выполнения определяется порядком слов. Скобки не используются.

Пример вычисления :

2 3 + 4 * . \ Сначала 2 + 3 = 5, затем 5 × 4 = 20 → выводит 20

4. Комментарии

В Gforth есть два типа комментариев:

Строчные комментарии начинаются с \ и продолжаются до конца строки:

\ Это комментарий. Он будет проигнорирован.

5 10 + . \ Сложение 5 и 10

Блочные комментарии заключаются в ( и ):

( Этот комментарий может занимать несколько строк

и будет полностью проигнорирован компилятором. )

Комментарии стекового эффекта — особый вид комментариев, описывающий, что слово берёт из стека и что оставляет. Записываются в формате ( вход -- выход ):

: square ( n -- n^2 ) dup * ; \ Берёт число n, возвращает n²

5. Определение собственных слов

Новые слова определяются с помощью конструкции : (двоеточие) и ; (точка с запятой):

: имя ( комментарий стекового эффекта ) тело слова ;

Разбор синтаксиса: * : — начало определения; * имя — имя нового слова; * ( комментарий ) — необязательный комментарий стекового эффекта; * тело слова — последовательность команд, которые будут выполняться; * ; — конец определения.

Примеры определений:

Слово для удвоения числа:

: double ( n -- 2n ) 2 * ;

5 double . \ Выводит 10

Слово для вычисления площади прямоугольника:

: area ( width height -- area ) * ;

4 5 area . \ 4 × 5 = 20 → выводит 20

Слово с условной логикой (будет подробно рассмотрено позже):

: is-positive ( n -- flag ) 0> ;

3 is-positive . \ Выводит -1 (true в Forth)

-2 is-positive . \ Выводит 0 (false)

6. Проверка и отладка

Полезные команды для отладки: * .S — вывести содержимое стека без удаления элементов; * SEE имя — показать определение слова (декомпиляция); * . — вывести и удалить верхний элемент стека; * CR — перевод строки.

Пример отладки: