Язык программирования Форт


Глава 14. Память Форта. Словари и контекстные словари - часть 25


Слово HELP делает HELPS контекстным словарем для того, чтобы найти ваши полезные описания. Слово FIND находит (имя) и исполняет его, а затем делает контекстным словарем FORTH. Слово [COMPILE] необходимо, если ваши контекстные словари являются словами немедленного исполнения (для дальнейшего обсуждения см. гл.15). Кроме того, пользователи Форт-83 должны использовать ' вместо FIND. Это описание опасно: в такой системе может произойти катастрофа, если HELP будет использовано с (имя), которое не было описано в контекстном словаре "HELPS". Несколько лучше описание HELP, приведенное ниже: : HELP [COMPILE] HELPS FIND ?DUP IF [ FIND HELPS ] LITERAL OVER U< ( IF ['] HELPS OVER U< ) (Форт-83) IF EXECUTE ELSE DROP . " not in HELP list." THEN ELSE ." not found." THEN [COMPILE] FORTH ;

Когда исполняется HELP (name), HELPS делается контекстным словарем, так что новые описания будут найдены раньше, чем слова FORTH с тем же именем получат шанс быть исполненным. Слово FIND выдает CFA (имя) или 0, если поиск не имел успеха. Если (name) найдено, контролируется его CFA, для того чтобы выяснить, было ли (name) описано позже. чем HELPS (функция [ FIND HELPS ] LITERAL будет прояснена в гл.15); если это так, слово из словаря HELPS исполняется, если же нет, имеется две возможности: или (name) не описано в словаре HELPS, или оно нигде не найдено, включая словарь FORTH. При реализации этих вариантов выдаются соответствующие сообщения. В конце концов FORTH делается контекстным словарем, так чтобы вы после выполнения HELP не остались в словаре HELPS. Этот пример должен показать вам, как отдельные контекстные словари могут выполнять работу просто и понятно там, где другие методы трудноприменимы.

Упражнения

1. Опишите HELP так, чтобы вы возвращались в контекстный словарь, из которого произошло обращение (а не всегда в FORTH). 2. Опишите контекстный словарь "HELPS", который печатает описание слов из блоков на диске, а не из словаря, лежащего в памяти.


Начало  Назад  Вперед