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


ОПРЕДЕЛЯЮЩИЕ СЛОВА ВЫ МОЖЕТЕ СПЕЦИФИЦИРОВАТЬ САМИ - часть 3


Например, при выполнении выражения6 КЛАПАН С@

будет включен гидравлический клапан 6.

Приведенное выше решение приемлемо только в тех случаях, когда в программе требуется один или два таких массива. Если же массивов должно быть больше, использование определяющего слова упростит программирование.: МАССИВ ( #байтов -- ) \ определение одномерного массива байтов CREATE ALLOT DOES> ( i -- a) + ; 30 МАССИВ КЛАПАН 6 КЛАПАН С@

Рассмотрим выполнение этого определения. В фазе 1 определяется слово МАССИВ. В фазе 2 исполняется МАССИВ, который в свою очередь обращается к слову CREATE (чтобы определить КЛАПАН) и слову ALLOT (для резервирования 30 байтов под массив). В фазе 3 исполняется слово КЛАПАН, инициируя код периода выполнения слова МАССИВ с добавлением индекса (6) к начальному адресу массива.

Если внести изменения в определение определяющего слова перед его повторной компиляцией, то тем самым можно изменить характеристики всех слов, входящих в данное семейство. Такая возможность значительно упрощает разработку программ. Например, когда нужно при описании массива заполнить его нулями, вы должны соответствующим образом создать определение МАССИВ. Сначала вы определяете слово, которое аналогично ALLOT, но «обнуляет» выделенный участок памяти:: 0ALLOT ( #байтов -- ) HERE OVER ERASE ALLOT ;

Затем подставляете в определение МАССИВ вместо ALLOT слово 0ALLOT: : МАССИВ ( #байтов -- ) \ определение одномерного массива байтов CREATE 0ALLOT DOES> ( i -- a) + ;

Можно также выделить в отдельный фрагмент некоторые отладочные процедуры, необходимые при разработке программы, а затем удалить их, предварительно убедившись в том, что она работает правильно. Ниже приводится вариант слова МАССИВ, где во время выполнения проверяется, не вышел ли индекс массива за установленные границы. : МАССИВ ( #байтов) CREATE DUP , ALLOT DOES> ( i -- a) 2DUP @ U< NOT ABORT" Выход эа границу " + 2+ ;

Это происходит следующим образом:DUP , ALLOT Компиляция счетчика и выделение заданного количества байтов,




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



Книжный магазин