ВЕКТОРНЫЕ ВЫЧИСЛЕНИЯ
Векторное вычисление, хотя и воспринимается как нечто трудоемкое, на самом деле осуществляется довольно просто. Вместо того чтобы выполнять какое-либо определение непосредственно (см. выражение ' ВСТРЕЧА EXECUTE), мы выполняем его косвенно, запоминая адрес определения в некоторой переменной, а затем выполняя содержимое этой переменной:VARIABLE УКАЗАТЕЛЬ ( участок для хранения исполнительного вектора) ' ВСТРЕЧА УКАЗАТЕЛЬ ! ( указатель ссылается на слово ВСТРЕЧА ) УКАЗАТЕЛЬ @ EXECUTE ( выполнение фрагмента, на который ссылается УКАЗАТЕЛЬ).
(Для вычисления адреса, который засылается в УКАЗАТЕЛЬ, примените соответствующее выражение из столбца 1 приведенной выше таблицы). В ряде систем есть слово @EXECUTE, которое эквивалентно выражению "@ EXECUTE", но выполняется более эффективно.
Вы Можете попытаться сделать следующий пример самостоятельно: 1 VARIABLE 'ФРАЗА ( вектор) 2 : ФРАЗА 'ФРАЗА @ EXECUTE ; ( векторизуемое определение) 3 : ПРИВЕТ ." Привет " ; 4 : ДО-СВИДАНИЯ ." До свидания " ; 5
6 ' ПРИВЕТ 'ФРАЗА ! ( инициализация вектора)
В строке 1 вы определяете переменную с именем 'ФРАЗА. Она будет вашим указателем. В строке 2 специфицируется слово ФРАЗА для выполнения определения, адрес которого находится в указателе 'ФРАЗА. В строках 3 и 4 создаются слова, выводящие сообщения: «Привет» и «До свидания». В строке 6 вы загружаете адрес слова ПРИВЕТ в указатель 'ФРАЗА по правилам, изложенным в столбце 1 вышеприведенной таблицы.
Теперь если выполнить слово ФРАЗА, то получится следующее: ФРАЗА Привет ok
Если вы альтернативно выполните выражение ' ДО-СВИДАНИЯ 'ФРАЗА !
тем самым запомнив адрес ДО-СВИДАНИЯ в переменной 'ФРАЗА, то результат будет таким:
ФРАЗА До свидания
ok
Апостроф в имени ' ФРАЗА означает, что данное имя является указателем при векторном вычислении - таковы соглашения в Форте. Так как апостроф при выполнении выдает адрес, то префикс соответствует адресу слова ФРАЗА.
Мы можем заставить само слово ФРАЗА выполнять все, что захотим, даже слова (ПРИВЕТ и ДО-СВИДАНИЯ), которые определены после слова ФРАЗА.
Следовательно, апостроф обеспечивает один из способов реализации ссылок вперед. Ссылки вперед возникают в тех случаях, когда при определении некоторого слова приходится обращаться к другому слову, еще не определенному. В Форте нет естественных средств для программирования такой ситуации, да и в большинстве ситуаций вы можете просто по-иному расположить загружаемые определения. Но иногда переупорядочивание определений невозможно и вам без ссылок вперед не обойтись. В нашем примере на строке 6 происходит завершение реализации ссылки вперед.
Более общее применение векторных вычислений - изменение выполняемых действий некоторого слова уже после того, как оно скомпилировано. Определения слов, осуществляющих интерфейс, таких, как слова управления видеодисплеем, принтером, дисководом, часто делают векторными. Векторизация позволяет хранить имена для перечисленных функций в предварительно скомпилированной части Форт-системы и в то же время организовать свои собственные варианты их исполнения. Поскольку Форт-система сама использует вектора, ваши изменения будут влиять и на нее. Вы можете заставить систему после вывода «ok» сделать возврат каретки на любом терминале или принтере, к которому есть доступ.