]]> ]]>
Править | Обсудить | История

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

IDE/Редакторы:

Примеры:

Факториал:

Пример для версий 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

]]>

Работа программистам