ПРИМЕНЕНИЕ СЛОВА WORD
Помимо текстового интерпретатора многие слова Форта используют WORD. Так, слово CREATE выбирает из входного потока имя создаваемого слова, a FORGET - имя слова, которое должно быть забыто.
Вернемся к приведенному выше примеру с генератором бессмысленных сообщений. Хотелось бы иметь при таком генераторе удобные средства введения в базу данных бессмысленных фраз (текстовый редактор Форта не показывает нам, где начинается 20-й или 40-й столбец). Допустим, нам нужно определить для введения в базу данных очередного слова из входного потока слово «добавить»: начало добавить высокий добавить культурный добавить уровень добавить общий и т.д.
Это можно сделать следующим образом:\ загрузчик в базу данных бессмысленных сообщений VARIABLE РЯД VARIABLE СТОЛБЕЦ : начало 0 РЯД ! 0 СТОЛБЕЦ ! ; : +РЯД 1 РЯД +! ; : +СТОЛБЕЦ СТОЛБЕЦ @ 1+ 3 /МОD РЯД +! СТОЛБЕЦ ! ;
: добавить \ бессмысленная фраза ( -- ) 1 WORD COUNT РЯД @ СТОЛБЕЦ @ БРЕД DUP 20 BLANK SWAP CMOVE UPDATE +СТОЛБЕЦ ;
Обратите внимание на то, как приведенные выше программы вычисляют соответствующие строку и столбец, а также на удачное выделение слова БРЕД, которое оставляет в вершине стека адрес в блоке пересечения заданных строки и столбца.
Кроме того, необходимо отметить, что выражение 1 WORD удачнее выражения BL WORD, поскольку некоторые фразы состоят из двух слов, разделенных пробелами, а мы не хотим считывать только первое слово. Наша цель - считать все, что пользователь ввел до конца строки. В коде ASCII символ 1 является управляющим. Обычно он не может быть введен с клавиатуры и, значит, не может появиться среди символов входного буфера. Поэтому выражение 1 WORD применяется для чтения содержимого входного буфера до того момента, пока пользователь не нажмет клавишу RETURN.
Со словом WORD могут сочетаться и другие ограничители, например кавычки и круглые скобки. Слово Форта ." использует выражение ASCII " WORD
для чтения из входного потока выводимой строки. Слово ( использует выражение ASCII ) WORD
для выборки из входного потока фрагмента, который должен быть пропущен. Считывая из входного потока запятые или иные разделители, можно даже обрабатывать несколько фрагментов из одной строки, но из разных полей.
Уже знакомое вам слово TEXT упрощает определение слова «добавить»: : добавить \ бессмысленную фразу ( -- ) 1 TEXT PAD РЯД @ СТОЛБЕЦ @ БРЕД 20 CMOVE UPDATE +СТОЛБЕЦ ;