ПЕРЕМЕННЫЕ (ОБЩИЕ СВЕДЕНИЯ)
Для начала приведем пример ситуации, когда вам понадобилось бы воспользоваться переменной, например для хранения даты1. В первую очередь создадим переменную (VARIABLE) с именем ДАТА2
VARIABLE ДАТА
Если сегодня 12-е число, то мы вводим: 12 ДАТА !, т. е. помещаем 12 в стек, затем указываем имя переменной и, наконец, выполняем слово ! (ЗАПОМНИ). Это выражение записывает число 12 в переменную ДАТА. Для обратного действия нужно ввести:
1 Для начинающих. Предположим, ваш компьютер выдает банковские счета на протяжении дня, и каждый такой счет должен включать дату. Вам не хотелось бы хранить дату все время в стеке и, кроме того, дата не должна быть частью определения, иначе его пришлось бы переопределять каждый день. Вам нужна переменная.
2 Для пользователей систем фиг-Форт. Чтобы вариант VARIABLE вашей системы совпадал с описанным в книге, введите определение : VARIABLE 0 VARIABLE ;
ДАТА @, иными словами, назвать переменную, а затем выполнить слово @ (ВЫБРАТЬ) Указанное выражение выбирает число 12 и помещает его в стек. Таким образом, выражение
ДАТА @ . 12 ok
выведет на печать дату
На Форте это делается еще проще с помощью слова, определение которого приводится ниже:
: ? @ . ;
Поэтому вместо «ДАТА-выборка-точка» мы можем просто набрать ДАТА ? 15 ok
ДАТА будет иметь значение 12 до тех пор, пока вы не измените его. Для того чтобы изменить значение переменной, необходимо записать в нее новое число. 13 ДАТА ! ok
ДАТА ? 13 оk
Понятно, что можно определить и дополнительные переменные для месяца и года:
VARIABLE ДАТА VARIABLE МЕСЯЦ VARIABLE ГОД
а затем слово с именем !ДАТА (для «запоминания-даты»), например:
: !ДАТА ( месяц день год -- ) ГОД ! ДАТА ! МЕСЯЦ ! ;
и использовать его следующим образом: 7 31 88 !ДATA ok
После этого нужно определить слово с именем .ДАТА (для «вывода-даты») :
: .ДАТА МЕСЯЦ ? ДАТА ? ГОД ? ;
Ваша Форт-система уже имеет ряд определенных переменных, одна из которых — BASE Она содержит основание текущей системы счисления. На самом деле определения систем счисления
HEX, DECIMAL (и OCTAL, если в вашей системе таковая имеется) весьма просты:
: DECIMAL 10 BASE ! ; : HEX 16 BASE ! ; : OCTAL 8 BASE ! ;
Вы можете работать с любой системой счисления, просто загрузив ее основание в BASE1:
Если где-нибудь в определении системных слов, осуществляющих преобразования входных и выходных чисел, вы найдете выражение BASE @ значит, текущее значение BASE используется в процессе такого преобразования. Следовательно, одна и та же программа может работать с числами в любой системе счисления. Отсюда мы можем сделать следующее формальное заключение об использовании переменных: в Форте уместно создавать переменные для тех значений, используемых внутри определения, которые могут быть изменены в любой момент после того, как это определение уже скомпилировано.