ЖИВОЙ ЯЗЫК
Вообразите, что вы — управляющий офисом и только что взяли себе нового энергичного помощника. В первый день вы учите его оформлять вашу корреспонденцию по соответствующему формату (допустим, ваш помощник уже умеет печатать на машинке). В конце дня вы уже можете просто сказать ему: «Пожалуйста, отпечатайте это». На второй день вы показываете своему помощнику систему регистрации. Все утро у вас уходит на соответствующие разъяснения, но уже после обеда вам достаточно отдать короткое распоряжение: «Пожалуйста, зарегистрируйте это». К концу недели вы будете понимать друг друга с полуслова. Так, если вы скажете своему помощнику: «Пожалуйста, отправьте это письмо», он поймет, что письмо нужно напечатать, дать вам на подпись, сделать с него фотокопию и зарегистрировать ее, а оригинал отослать по почте. Подобные взаимоотношения позволят как вам, так и вашему помощнику выполнять свою работу более эффективно и доставят вам обоим больше удовольствия, чем любые другие.
Итак, для правильной организации труда и обеспечения эффективного взаимодействия сотрудников необходимо:
определить круг задач и присвоить каждой задаче имя;
сгруппировать однотипные задачи в более крупные и присвоить каждой из укрупненных задач имя и т. д.
Форт дает вам возможность аналогичным образом организовать ваши собственные процедуры и передать их компьютеру таким же способом (разве что не говорить ему: «пожалуйста»). В качестве примера можно привести стиральную машину, управляемую микропроцессором с программой на Форте. Заключительной командой в нашем примере будет команда, которой мы присвоим имя СТИРАЛЬНАЯ-МАШИНА. Ниже дается определение команды СТИРАЛЬНАЯ-МАШИНА так, как оно выглядит на Форте: : СТИРАЛЬНАЯ-МАШИНА СТИРАТЬ ВЫКРУЧИВАТЬ ПОЛОСКАТЬ ВЫКРУЧИВАТЬ ;
На языке Форт двоеточие означает начало нового определения. Первое слово после двоеточия, СТИРАЛЬНАЯ-МАШИНА, является именем новой процедуры. Остальные слова, СТИРАТЬ, ВЫКРУЧИВАТЬ, ПОЛОСКАТЬ, ВЫКРУЧИВАТЬ, составляют «определение» этой новой процедуры.
Наконец, точкой с запятой отмечается конец определения.
Каждое слово, входящее в состав определения СТИРАЛЬНАЯ-МАШИНА в нашей программе, описывающей стиральную машину, уже специфицировано. В частности, посмотрим, как записывается определение команды ПОЛОСКАТЬ. : ПОЛОСКАТЬ НАЛИТЬ-ВОДУ СТИРАТЬ ВЫЛИТЬ-ВОДУ ;
Как видите, определение ПОЛОСКАТЬ состоит из группы слов: НАЛИТЬ-ВОДУ, СТИРАТЬ и ВЫЛИТЬ-ВОДУ. Опять-таки каждое из этих слов уже где-то специфицировано в программе, описывающей стиральную машину. Определение команды НАЛИТЬ-ВОДУ может быть таким: : НАЛИТЬ-ВОДУ КРАНЫ ОТКРЫТЬ ДО-НАПОЛНЕНИЯ КРАНЫ ЗАКРЫТЬ ;
В приведенном определении мы ссылаемся как на объекты (краны), так и на действия (открыть и закрыть). Слово ДО-НАПОЛНЕНИЯ введено для создания «Цикла задержки», чтобы контролировать включение индикатора уровня заполнения емкости стиральной машины водой.
Если мы проследим эти определения в обратном порядке, то в конечном итоге обнаружим, что все они специфицированы в терминах группы команд, которые образуют основу всех Форт-систем. Например, полиФорт включает около 300 таких команд. Одни из них сами определены через двоеточие, как было показано выше, другие — непосредственно в терминах машинного языка конкретного компьютера. В языке Форт специфицированная таким образом команда называется словом.
Возможность определять слова в терминах других слов называется расширяемостью. Расширяемость является основой хорошего стиля программирования и позволяет достичь необходимого уровня мощности языка.
Обслуживает ли ваша программа линию монтажа, собирает ли данные для научного эксперимента, используется ли для коммерческих целей или является игровой — во всех случаях вы можете создать свой собственный «живой язык», который соответствует вашим потребностям.
В этой книге мы рассмотрим большинство часто используемых стандартных команд Форта.