В Фиг-Форте, кстати, есть вещь, которая не ясна, даже после изучения кода. Например, слово TASK в глоссарии по Фиг-форт определялось, как ничего не делающее, для разграничения аппликаций, чтобы забыть полностью всю последнюю аппликацию по FORGET TASK . Говорилось также в разных статьях, что общей практикой тогда было Форт-сессию начинать с
: TASK ; , чтобы по FORGET TASK вернуть все к изначальному состоянию.
The normal convention is to start a FORTH session with the dummy definition:
: TASK ; OK
The work can then be erased by . FORGET TASK. FORTH programs often start with a TASK definition, and finish with FORGET TASK to free the system for other work.Проблема в том, что слово TASK в Фиг-форте для IBM PC уже определено и оно как раз последнее в его словаре, но забыть его по FORGET нельзя. Забор FENCE не позволяет. При попытке выполнить FORGET TASK не забывается вообще ничего. Это тот случай когда просто нужно знать, что имелось ввиду. По коду и не допрешь. Т.е. непонятно - это ошибка или все таки таков был замысел и имелось ввиду, что пользователь первым делом определит новое слово TASK и будет забывать уже его или будет начинать работу (например, интерпретацию экрана) вообще с FORGET TASK : TASK ; и FORGET TASK завершившись с ошибкой заодно почистит стек или ... что имелось ввиду ?
FORGET , кстати, в Фиг-форте какой-то безбашенный по своей простоте :
Код:
: FORGET
CURRENT @ CONTEXT @ - 24 ?ERROR \ Если CURRENT != CONTEXT, то выход по ошибке
[COMPILE] '
DUP FENCE @ < 21 ?ERROR \ Если забор не позволяет, то выход по ошибке
DUP NFA DP ! \ Поправили HERE
LFA @ CONTEXT @ ! \ Поправили указатель на последнее слово в словаре CONTEXT
;
Интересно, что VOC-LINK , сшивающий все словари в список в Фиг-форте
есть и при создании словарей по VOCABULARY формируется. Но вот нужен-то
он только для FORGET и более нигде. И именно FORGET-у на него насрать.
Я этого алгоритма не догоняю. Что имелось ввиду ? Какой стиль работы ?
Раз проверяется на равенство CURRENT и CONTEXT, то имеется ввиду, что
словари есть. Но почему с ними обходятся так грубо ?
При каких условиях имелось ввиду применять такой FORGET ?
Впрочем, есть словечко COLD которое сразу и грубо возвращает Фиг-Форт
к состоянию ядра.