ДИАЛОГ
Одно из специфических свойств Форта состоит в том, что он дает возможность «выполнить» слово, просто написав его. Достаточно просто набрать это слово на клавиатуре и нажать клавишу RETURN (возврат каретки или ввод). Конечно, можно применять данное слово в определении других слов, помещая его в соответствующее определение.
Форт называется диалоговым языком, потому что его команды выполняются сразу, как только вы их вводите. В качестве примера (вы можете его выполнить самостоятельно) рассмотрим процесс объединения простых команд в более сложные. Мы будем использовать некоторые слова Форта для управления экраном дисплея или печатающим устройством. Но прежде познакомимся с механизмом «диалога» посредством клавиатуры терминала.
Займите место за своим терминалом (для некоторых он будет воображаемым). Возможно, кто-нибудь великодушно предоставит вам условия для занятий, в противном случае вам придется внимательно интерпретировать самому все команды, предназначенные вашему компьютеру. Нажмите клавишу RETURN. Компьютер ответит: ok («все в порядке»), что означает приглашение к работе. С помощью клавиши RETURN вы передаете компьютеру свой запрос. Ответ jak свидетельствует о том, что ваш запрос выполнен, причем без единой ошибки. Мы пока ни о чем не просили, поэтому компьютер послушно ничего не выполнил и выдал приглашение ok.
Теперь введите 15 SPACES
что означает 15 ПРОБЕЛОВ.
Для многих Форт-систем имеет значение, на каком регистре — верхнем или нижнем — вы набираете текст, поэтому, вводя SPACES, убедитесь в том, что набираете эту строку на верхнем регистре. Если во время набора была допущена ошибка, вы можете исправить ее, нажав клавишу backspace (возврат на одну позицию). Вернитесь к тому месту, где сделана ошибка, введите нужный символ и продолжайте набор. Набрав строку правильно, нажмите клавишу RETURN. (После нажатия клавиши RETURN исправлять ошибку уже поздно.)
В дальнейшем мы будем использовать обозначение <return> в тех местах, где вы должны нажимать клавишу RETURN, и подчеркивать ответы компьютера, чтобы отличать их от других символов (даже если сам компьютер и не подчеркивает свои ответы ).
Что произойдет в такой ситуации:15 SPACES<return> ok
Как только вы нажали клавишу ввода, компьютер выведет 15 пробелов и затем, выполнив ваш запрос, выдает: ok (после 15-го пробела).
Наберите на клавиатуре следующее:42 EMIT<return> *ok
Фраза «42 EMIT» приказывает компьютеру вывести символ * (мы обсудим эту команду позднее). Компьютер выводит требуемый символ, а затем ok
На одной строке мы можем помещать несколько команд. Например:15 SPACES 42 EMIT 42 EMIT<return> **ok
На этот раз компьютер выводит 15 пробелов и две звездочки. Отметим, что при вводе слов и/или чисел их можно разделять любым количеством пробелов (как вам удобно), но между ними должен быть хотя бы один пробел, чтобы компьютер мог различать слова и/или числа.
Вместо того чтобы всякий раз вводить фразу 42 EMIT
давайте определим ее как слово STAR (ЗВЕЗДОЧКА). Итак, введите: : STAR 42 EMIT ;<return> ok
Здесь STAR — имя, а 42 EMIT — определение. Заметьте, что мы отделили двоеточие и точку с запятой от соседних с ними слов одним пробелом. Чтобы определения Форта легче воспринимались, условимся отделять имя определения от собственно определения тремя пробелами.
После того как вы наберете на клавиатуре приведенное выше определение и нажмете клавишу RETURN, компьютер ответит вам: ok, т. е. он распознал ваше определение и запомнил его. Введите далее:STAR<return> *ok
Как видите, компьютер выполнил ваш приказ и выдал звездочку. Определенное вами слово STAR ничем не отличается от определенного ранее EMIT. Поэтому чтобы вам легче было ориентироваться, ранее определенные слова мы будем выделять полужирным шрифтом.
Другим определенным системой словом является CR, которое обеспечивает возврат каретки и перевод строки на вашем терминале. Обязательно почувствуйте разницу в использовании клавиши RETURN и словом Форта CR. В качестве примера наберите на клавиатуре CR<return> ok
Компьютер осуществил возврат каретки, а затем вывел ok (на следующей строке).
Введите такой текст: CR STAR CR STAR CR STAR<return>
* *ok
Поместим CR в определение слова MARGIN (ПОЛЕ ПРОБЕЛОВ): : MARGIN CR 30 SPACES ;<return> ok
Теперь вы можете ввести следующее: MARGIN STAR MARGIN STAR MARGIN STAR<return>
и получите три вертикально расположенные звездочки, дополненные слева 30 пробелами.
Комбинация слов MARGIN STAR пригодится нам в дальнейшем, поэтому введем определение BLIP (ТОЧКА): : BLIP MARGIN STAR ;<return> ok
Нам также предстоит выводить горизонтальные последовательности звездочек. Для этой цели введем следующее определение (его назначение мы объясним позднее): : STARS 0 DO STAR LOOP ;<return> ok
Итак, мы можем ввести: 5 STARS<return> *****ok
или 35 STARS<return> ***********************************ok
или любое представимое число звездочек! Однако нельзя задавать сочетание "0 STARS", в особенности для систем Форта-83. Подробнее об этом речь пойдет в гл. 6.
Нам необходимо слово, которое выполняет команду MARGIN, а затем выводит пять звездочек. Определим слово BAR (ПО-ЛОСКА): : BAR MAR6IN 5 STARS ;<return> ok
после чего можно ввести строку: 3AR BLIP BAR BLIP BLIP CR
В результате вы получите букву F, составленную из звездочек:
*****
*
*****
*
*
В заключение определим слово для этой новой процедуры. Назовем его F: : F BAR BLIP BAR BLIP BLIP CR ;<return> ok
В этом примере показано, каким образом простые команды Форта могут становиться основой для образования более сложных команд. Программа на Форте выглядит скорее как ряд нарастаю-щих по мощности определений, чем как последовательность команд, задающая порядок их выполнения. Чтобы вы имели представление о реальной Форт-программе, мы приводим здесь распечатку нашей учебной программы: 0 ( Большая буква F ) 1 : STAR 42 EMIT ; 2 : STARS 0 DO STAR LOOP ; 3 : MARGIN CR 30 SPACES; 4 : BLIP MARGIN STAR ; 5 : BAR MARGIN 5 STARS; 6 : F BAR BLIP BAR BLIP BLIP CR ; 7 8