Начальный курс программирования на языке Форт

ВЫЧЛЕНЕНИЕ ОПРЕДЕЛЕНИЙ


Рассмотрим теперь проблему разбиения применительно к определениям Форта. Мы только что привели пример, в котором разбиение определений упростило нам решение задачи.

Наше первое определение слова РАЗМЕР-ЯИЦ (см. гл. 4) сортировало яйца по весу и выводило на печать соответствующие категории яиц. В предыдущем примере мы разбили «сортировку» и «печать» на два отдельных слова. Вы можете использовать слово КАТЕГОРИЯ с целью выработки аргумента как для слова, инициирующего печать, так и для слова, осуществляющего подсчет (или для обоих вместе). Можно применить слово МАРКИРОВКА, обеспечивающее вывод на печать, и для слова РАЗМЕР-ЯИЦ, и для слова СВОДКА.

Ч. Мур, автор языка Форта, утверждает, что «хороший словарь Форта содержит большое число небольших определений. Недостаточно разбить некоторую задачу на небольшие фрагменты. Суть дела в том, чтобы выделить слова, которые можно повторно использовать». Например, в следующем рецепте Взять банку с томатным соусом. Открыть ее. Выложить томатный соус на сковороду. Взять банку с грибами Открыть ее. Выложить грибы на сковороду

вы можете «вычленить» действия: взять, открыть, выложить и объединить их в одном месте, так как они являются общими по отношению и к банке с томатным соусом, и к банке с грибами. После этого вы можете присвоить процессу в целом имя и в дальнейшем просто писать: ТОМАТ ДОБАВИТЬ ГРИБЫ ДОБАВИТЬ

и любой шеф-повар, окончивший «постфиксную» кулинарную школу, хорошо поймет, что вы имеете в виду.

Вычленение определений не только упрощает написание программы (и ее отладку), но и позволяет экономить память. Повторно используемое слово, например добавить, нужно определить только один раз. Чем сложнее программа, тем больше мы экономим при ее разбиении. Прежде чем покинуть птицеферму, приведем еще одно соображение по поводу стиля программирования на Форте Вспомним наше определение слова РАЗМЕР-ЯИЦ: : РАЗМЕР-ЯИЦ ( вес-на-дюжину — ) КАТЕГОРИЯ DUP МАРКИРОВКА УЧЕТ;


Слово КАТЕГОРИЯ доставляет значение, которое нам хотелось бы передать как слову МАРКИРОВКА, так и слову УЧЕТ, поэтому мы включаем сюда операцию DUP. Чтобы сделать определение более ясным, рискнем вынести из него DUP и поместим его в самое начало определения МАРКИРОВКА. Таким образом, можно написать: : МАРКИРОВКА ( номер-категории — номер-категории) и т.д. : РАЗМЕР-ЯИЦ ( в ее-на-дюжину — ) КАТЕГОРИЯ МАРКИРОВКА УЧЕТ ;

где КАТЕГОРИЯ передает значение слову МАРКИРОВКА, а МАРКИРОВКА передает его слову УЧЕТ. Несомненно, этот вариант должен «сработать». Но впоследствии при определении СВОДКА мы вынуждены будем применить выражение I МАРКИРОВКА DROP вместо простого I МАРКИРОВКА.

Программирующим на Форте рекомендуется придерживаться следующего соглашения: там, где это возможно, слова должны уничтожать свои параметры. Вообще лучше помещать DUP в «вызывающем» определении (РАЗМЕР-ЯИЦ), чем в «вызываемом» (МАРКИРОВКА).


Содержание раздела