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


ОПРЕДЕЛЯЮЩИЕ СЛОВА ВЫ МОЖЕТЕ СПЕЦИФИЦИРОВАТЬ САМИ


Рассмотрим три класса определяющих слов. Слова первого класса дают возможность выделять фрагменты с похожими свойствами из серии определений через двоеточие. В предыдущей главе вы имели дело со следующими определениями: : 1ПРИЛАГАТЕЛЬНОЕ 10 CHOOSE 0 .БРЕД ; : 2ПРИЛАГАТЕЛЬНОЕ 10 CHOOSE 1 .БРЕД ; : СУЩЕСТВИТЕЛЬНОЕ 10 CHOOSE 2 .БРЕД ;

Если бы вам пришлось определять и другие части речи, то можно было бы их выделить в отдельное слово «часть-речи»:: ЧАСТЬ ( столбец# -- ) 10 CHOOSE SWAP .БРЕД ; : 1ПРИЛАГАТЕЛЬНОЕ 0 ЧАСТЬ ; : 2ПРИЛАГАТЕЛЬНОЕ 1 ЧАСТЬ ; : СУЩЕСТВИТЕЛЬНОЕ 2 ЧАСТЬ ;

Однако при этом слишком расточительно расходуется память. Поскольку различие между показанными тремя словами заключено только в одном числе, их незачем определять через двоеточие. Целесообразнее воспользоваться таким приемом:: ЧАСТЬ ( столбец# -- ) CREATE , DOES> @ 10 CHOOSE SWAP .БРЕД ; 0 ЧАСТЬ 1ПРИЛАГАТЕЛЬНОЕ 1 ЧАСТЬ 2ПРИЛАГАТЕЛЬНОЕ 2 ЧАСТЬ СУЩЕСТВИТЕЛЬНОЕ

Приведенное определение слова ЧАСТЬ аналогично определению слова CONSTANT1, с той лишь разницей, что в период выполнения помимо занесения в стек номера столбца оно также определяет номер строки посредством датчика случайных чисел и обращается к слову .БРЕД.

Следующий довольно большой класс определяющих слов позволяет выделять повторяющиеся фрагменты кодов периода компиляции. Допустим, требуется назначить ряд блоков для группы студентов начиная с блока 360, причем каждому студенту нужно выделить по 25 блоков. Для этого понадобится несколько кон-

1 Для пуристов. Иногда имеет смысл объединять существующие определяющие слова, если они выполняют большую часть тех функций (или все), которые должны выполняться во время компиляции. Так, выражение CREATE, с тем же эффектом можно заменить словом CONSTANT. Стандарт, однако, не рекомендует пользоваться такими приемами и не во всех системах это получится.

стант, обозначающих номер начального блока для каждого студента. Константы можно определить так:360 CONSTANT ВАСИЛЬЕВ 385 CONSTANT СИМОНЧИК 410 CONSTANT РЯБИНИНА 455 CONSTANT ИВАНОВА 460 CONSTANT ПЕТРОВА 485 CONSTANT ДЕМИН




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