48004 (608429), страница 3
Текст из файла (страница 3)
Определяющее слово Форта выполняет две функции: во-первых, определяет понятие (резервирует память, указывает, откуда брать значения и т.д.) и, во-вторых, определяет действия, которые можно выполнять над определёнными понятиями. В соответствии с этим двумя функциями определяющее слово состоит из двух составляющих частей: создающей и исполняемой.
Синтаксис определяющего слова
CREATE > СОЗДАВАЕМАЯ ЧАСТЬ
DOES > ИСПОЛНЯЕМАЯ ЧАСТЬ
Рассмотрим в качестве примера определение понятия вектор. При создании вектора будем указывать размер (число элементов), а при обращении к нему - индекс элемента, в результате чего получается адрес данного элемента. Этот адрес можно разыменовать и получить значение элемента или можно заслать по этому адресу новое значение. Если желательно контролировать правильность индекса при обращении к вектору, то определение может выглядеть так:
; Вектор CREATE DUP , 2*ALLOT
DOES >
OVER 1- OVER U< (Проверка индекса)
IF SWAP 2 * + EXIT THEN
. "Ошибка в индексе"
Рассмотрим, как работает данное определение при создании вектора 10 вектор Х.
Создающая часть компилирует размер вектора и вслед за этим отводит память на 10*2 байт. Таким образом, в словаре для вектора Х отводится размером 22 байта, в первых двух байтах хранится число 10 - размер вектора. При обращении к вектору Х на стеке должно находиться значение индекса. Слово DOES> кладёт сверху адрес области сформированной создающей частью, после чего работает исполняющая часть определения. Проверив, что индекс лежит в диапазоне между 1 и 10, она оставляет на стёке адрес, равный начальному адресу области плюс I*2 то есть адрес I - го элемента вектора, если считать, что элементы располагаются в зарезервированной области подряд. Если окажется, что индекс не положителен или больше числа элементов, то будет напечатано сообщение "Ошибка в индексе" и исполнение закончится через слово ABORT.
Заключение
Вспомним, что первые компьютеры обладали очень ограниченной памятью. Это было так не только из-за дороговизны оперативной памяти и даже не столько из-за неё, сколько из-за ограниченной возможности процессора адресовать память. Разрядность процессора налагает на величину максимального адреса очень жесткое ограничение. Если же основная масса памяти организована в виде стека, то проблема адресации уходит, так как запоминать необходимо только одну ячейку - вершину стека. Ещё одна крайне интересная особенность Форта видна в первых трёх примерах. Достаточно сложные вычислительные процессы идут совершенно без использования понятия переменной. Такая организация памяти, как уже упоминалось, существенным образом влияет на организацию подпрограмм. В некотором смысле их нет, а есть поток заданий, каждое из которых может представлять собой подпрограмму с точки зрения пользователя, чтобы понять механизм такого действа, нужно более тщательно рассмотреть работу Форт системы в целом, что уже выходит за рамки данной работы.
Литература
-
Вострикова З.П. и др. "Программирование на языке "БЕЙСИК" для персональных ЭВМ". Машиностроение, 1993г.
-
Гохман А.В. и др. "Сборник задач по математической логике и алгебры множеств", издательство Саратовского Университета, 1969г.
-
Гусев В.В. Основы импульсной техники. М. Советское радио, 1975
-
Касаткин В.Н. "Информация, алгоритмы, ЭВМ", М. Просвещение, 1991г.
-
Машовцев В.А. Вступительные экзамены по информатике//Информатика. 1997, №13
-
Орлов В.А. О вступительных экзаменах по информатике//Информатика, 1997, №15
-
Яснева Г.Г. Логические основы ЭВМ//Информатика и образование, 1998, №2
-
Лыскова В.Ю., Ракитина Е.А. Логика в информатике, М. Информатика и образование 1999
-
Шауцкова Л.З. “Решение логических задач средствами алгебры логики”, газета Информатика 1999, №5.








