Forth
- Русское название:
- Форт
- Дата создания:
- начало 1970-ых
- Создан под влиянием:
- Повлиял на:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .fs
- Диалекты:
- Реализации и версии (свернуть все | развернуть все):
Язык программирования Forth был разработан Чарльзом Муром в начале 1970-ых годов. Forth был формализован в 1977 году, стандарт ANSI принят в 1994.
Forth поддерживает как интерактивное выполнение команд (что делает возможным использование в качестве командной оболочки для систем без полноценной операционной системы), так и возможность компиляции последовательности команд.
К Forth близок Postscript (очень распространенный язык для описания распечатываемых материалов).
Элементы синтаксиса:
Комментарий до конца строки | / |
---|---|
Комментарии, которые не могут быть вложенными | ( ... ) |
Регистрозависимость | нет |
Регулярное выражение идентификатора переменной | любая комбинация символов, не содержащая пробелов и не являющаяся числом |
Присваивание значения переменной | value to varname |
Объявление переменной | variable varname |
Равенство | = или f= |
Неравенство | <> или f<> |
Сравнение | < > <= >= u< u> u<= u>= f< f> |
Определение функции | : f ... ; |
Вызов функции | a b ... f |
Вызов функции без параметров | f |
Если - то | condition if trueBlock then |
Если - то - иначе | condition if trueBlock else falseBlock then |
Бесконечный цикл | begin loopBody again |
Цикл с предусловием | begin condition while loopBody repeat |
Цикл с постусловием | begin loopBody condition until |
Цикл for - next для диапазона целых чисел с инкрементом на 1 | 11 1 do loopBody loop |
Цикл for - next для диапазона целых чисел с декрементом на 1 | 1 10 do loopBody -1 +loop |
Ссылки:
Примеры:
Факториал:
Пример для версий Toka 1.2Для факториалов 13-16 из-за арифметического переполнения возвращается неверное значение. Также не получилось убрать пробел между аргументом и знаком “!”. В результате вывод программы имеет следующий вид:
0 ! = 0
1 ! = 1
2 ! = 2
3 ! = 6
4 ! = 24
5 ! = 120
6 ! = 720
7 ! = 5040
8 ! = 40320
9 ! = 362880
10 ! = 3628800
11 ! = 39916800
12 ! = 479001600
13 ! = 1932053504
14 ! = 1278945280
15 ! = 2004310016
16 ! = 2004189184
#! /usr/bin/toka
[ dup 1 > [ dup 1 - recurse * ] ifTrue ] is factorial
0 17 [ i . i ." ! = " i factorial . cr ] countedLoop
bye
Hello, World!:
Пример для версий gforth 0.7.0Команда ."
считывает строку, заключенную в двойные кавычки, и присоединяет ее к текущему определению, поэтому эта строка будет выведена при выполнении. Один пробел, отделяющий ."
от Hello
, не является частью строки, а требуется для того, чтобы распознать ."
как команду.
Команда cr
в конце программы выводит следующий за ней текст с новой строки, являясь эквивалентом nl
в Prolog и endl
в C++.
." Hello, World!" cr
Факториал:
Пример для версий gforth 0.7.0Используется рекурсивное определение факториала. Forth — стек-ориентированный язык, поэтому все команды в нем основаны на работе со стеком. Так, DUP
копирует верхний элемент стека, константа — добавляет число на верх стека, >
— сравнивает второй сверху элемент с самым верхним, -
— вычитает из второго сверху самый верхний и т.д.
: fac recursive
dup 1 > IF
dup 1 - fac *
else
drop 1
endif ;
: lp
swap 1 + swap
do
i . i ." ! = " i fac . cr
loop ;
16 0 lp
Числа Фибоначчи:
Пример для версий gforth 0.7.0Используется итеративное определение чисел Фибоначчи.
: fib-iter
0 1 rot 0 ?do over + swap loop drop ;
: lp
1 do
i dup fib-iter . ." , "
loop drop ;
17 lp
." ..."
Числа Фибоначчи:
Пример для версий gforth 0.7.0Используется рекурсивное определение чисел Фибоначчи.
: fib-rec
dup 2 u< if exit then
1- dup recurse swap 1- recurse + ;
: lp
1 do
i dup fib-rec . ." , "
loop drop ;
17 lp
." ..."
Комментарии
]]>blog comments powered by Disqus
]]>