А: Обзор Форта (для новичков)
ПРИЛОЖЕНИЕ А
О Б З О Р Ф О Р Т А ~~~~~~~~~~~~~~~~~~~~~ ( Д Л Я Н О В И Ч К О В ) ~~~~~~~~~~~~~~~~~~~~~~~~~~~
----------------------------------------------------------------
СЛОВАРЬ.
На Форте (FORTH) говорят словами (и числами), которые отделяются друг от друга пробелами:
ЛАДОНЬ ОТКРЫТЬ РУКА ОПУСТИТЬ ЛАДОНЬ ЗАКРЫТЬ РУКА ПОДНЯТЬ
Подобные команды могут быть набраны прямо с клавиатуры или вначале набраны редактором на устройствах массовой памяти (в файлах на диске), а потом загружены ("LOAD"). Все слова, уже имеющиеся в системе или определенные пользователем, существуют в "словаре", связном списке. "Определяющие слова" используются для добавления новых имен в словарь. Одним из них является слово : (произносится "двоеточие"), которое используется для определения нового слова в терминах ранее определенных слов. Вот как можно было бы определить новое слово по имени ПОДЫМАТЬ:
: ПОДЫМАТЬ ЛАДОНЬ ОТКРЫТЬ РУКА ОПУСТИТЬ ЛАДОНЬ ЗАКРЫТЬ РУКА ПОДНЯТЬ ;
Слово ; заканчивает определение. Новое слово ПОДЫМАТЬ может теперь быть использовано вместо длинной последовательности слов, составляющих определение. Слова Форта могут быть вложены друг в друга неограниченно. Написание задачи на Форте состоит из построения все более мощных определений, таких, как приведенное, в терминах тех, что были определены ранее. Другим определяющим словом является CODE ("код"), которое используется вместо двоеточия для определения команды в терминах машинных инструкций используемого процессора. Слова, определенные с помощью CODE с точки зрения пользователя неотличимы от тех, что определены через двоеточие. Определения через CODE если и нужны, то только в самых критичных ко времени исполнения местах программы. - 280 -
СТРУКТУРЫ ДАННЫХ.
Еще одно определяющее слово - CONSTANT (конатанта) - используется так:
17 CONSTANT СЕМНАДЦАТЬ
Новое слово СЕМНАДЦАТЬ может теперь быть использовано вместо настоящего числа 17. Определяющее слово VARIABLE (переменная) создает место для хранения временных данных.
VARIABLE использется так:
VARIABLE БАНАНЫ
Создается место (ячейка) в памяти, идентифицируемое именем БАНАНЫ. Получение содержимого этой области памяти - это задача слова @ (произносится "разыменовать" или "взять"). К примеру,
БАНАНЫ @
достает содержимое переменной БАНАНЫ. Его антонимом является слово ! (произносится "загрузить" или "записать"), которое загружает число в ячейку памяти, типа
100 БАНАНЫ !
В Форте есть также слово для увеличения текущего содержимого на заданное число; например, фраза
2 БАНАНЫ +!
увеличивает счетчик на два, делая его равным 102. В Форте есть и много других операторов для структур данных но, что более важно, в нем содержатся также инструменты, нужные программисту для создания структур данных любого типа, требуемого в задаче.
СТЕК.
В Форте переменные и массивы служат для сохранения значений, которые могут быть нужны для множества программ и/или в непредсказуемые моменты времени. Они `не` используются для локальной передачи данных между определениями. Для этого Форт применяет гораздо более простой механизм: стек данных. - 281 -
Когда Вы набираете число, оно кладется на стек. Когда Вы вызываете слово, имеющее числовой аргумент, то оно забирает его со стека. Так, фраза
17 SPACES
выдаст семнадцать пробелов на текущее устройство вывода. "17" кладет на стек двоичный эквивалент числа 17; слово SPACES его употребляет. Константа также кладет на стек свое значение; так, фраза
СЕМНАДЦАТЬ SPACES
дает тот же эффект. Стек работает на основе принципа "последним вошел - первым вышел" (LIFO). Это значит, что данные могут передаваться между словами упорядоченным, модульным образом, соответствующим вложенности определений через двоеточие. К примеру, определение по имени ОСЬ могло бы вызывать фразу 17 SPACES. Это временное использование стека будет незаметно для любого другого определения, вызывающего ОСЬ, поскольку число, положенное на стек, снимается с него до того, как заканчивается определение слова ОСЬ.
Такое вызывающее слово могло само положить некоторые свои числа на стек до вызова слова ОСЬ. Эти числа останутся на стеке без повреждений после того, как ОСЬ будет отработана и вызывающее определение продолжит свою работу.
СТРУКТУРЫ УПРАВЛЕНИЯ.
Форт предлагает все структуры управления, необходимые для структурированного программирования без использования GOTO. Синтаксис конструкции IF THEN таков:
... ( флаг ) IF СТУЧАТЬ THEN ОТКРЫТЬ ...
"Флаг" - это число на стеке, которое употребляется частью IF. Ненулевое значение этого флага означает истину, а нулевое - ложь. Истинный флаг вызывает исполнение кода между IF (в данном случае, слова СТУЧАТЬ). Слово THEN отмечает конец фразы для условного исполнения; работа продолжается со слова ОТКРЫТЬ. Флаг со значением "ложь" дает `запрет` исполнения фразы между IF и THEN. В любом случае будет исполнено слово ОТКРЫТЬ. Слово ELSE позволяет создавать альтернативные фразы для условного исполнения при ложном флаге. Во фразе
( флаг ) IF СТУЧАТЬ ELSE ЗВОНИТЬ THEN ОТКРЫТЬ ... - 282 -
слово СТУЧАТЬ будет исполнено, если флаг истинен, в противном случае будет исполнено слово ЗВОНИТЬ. В любом из случаев работа будет продолжена, начиная со слова ОТКРЫТЬ. Форт позволяет также создавать циклы со счетчиком в виде
( верх ) ( низ ) DO ... LOOP
или неопределенные циклы в формах
... BEGIN ... ( флаг ) UNTIL
и
... BEGIN ... ( флаг ) WHILE ... REPEAT
ГДЕ НАЙТИ ПОЛНОЕ ОПИСАНИЕ.
Полноценное введение в набор команд Форта можно прочитать в книге `Starting FORTH`, выпущенное издательством Prentice-Hall. (Эта книга выпущена на русском языке под названием "Начальный курс программирования на языке Форт" - М:Финансы и статистика, 1990.)
---------------------------------------------------------------- - 283 -