THEN
THEN (тогда, то) — стандартное слово Каллисто.
THEN ( −− ) Конец ветвления IF.
Ввод слова THEN
В режиме ЛАТ последовательно нажмите четыре клавиши 2 ПП ИП 4
Детали реализации
На этапе компиляции THEN может вызывать авост.
THEN в стандарте ANS Forth
6.1.2270 THEN CORE Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: ( C: orig -- ) Добавляет семантику времени-выполнения, данную ниже к текущему определению. Разрешает ссылку вперед orig, используя адрес ячейки добавленной семантики времени-выполнения. Время-выполнения: ( -- ) Продолжает выполнение. См.: 6.1.1310 ELSE, 6.1.1700 IF. A.6.1.2270 THEN Типичное использование: : X ... test IF ... THEN ... ; или : X ... test IF ... ELSE ... THEN ... ;
История
Слово THEN является одним из самых древних сохранившихся слов Форта.
Оно появилось в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году (Национальная ускорительная лаборатория SLAC, Стэнфордский университет).
В 1970 году «условные операторы» (англ. Conditional statements) IF ELSE THEN были реализованы Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500.
Следущий код B-5500 FORTH проверял вершину стека на истинность и дублировал её, если она истина (аналог ?DUP):
IF DUP THEN
В 1971-73 годах Чак Мур перенёс Форт на DEC PDP-11 в National Radio Astronomy Observatory (англ., Шарлотсвилл). Появился косвенный шитый код (англ. indirect-threaded code), который изменил структуры управления, включая IF … THEN. Они получили элегантную реализацию с адресами на стеке данных во время компиляции.
В некоторых старых Фортах слово THEN называлось ENDIF
THEN в предыдущем стандарте Forth-83 (англ.)
THEN -- C,I,79 sys -- (compiling) Used in the form: flag IF ... ELSE ... THEN or flag IF ... THEN THEN is the point where execution continues after ELSE , or IF when no ELSE is present. sys is balanced with its corresponding IF or ELSE . See: IF ELSE
Пример реализации THEN из предыдущего стандарта Forth-83
: THEN >RESOLVE ; IMMEDIATE
THEN в стандарте Forth-79 (англ.)
THEN I,C,161 Used in a colon-definition in the form: IF ... ELSE ... THEN or IF ... THEN THEN is the point where execution resumes after ELSE or IF (when no ELSE is present).
THEN в fig-FORTH Release 1 glossary, май 1979 (англ.)
THEN P,CO,L0 An alias for ENDIF.
ENDIF addr n --- (compile) P,CO,L0 Occurs in a colon-definition in form: IF ... ENDIF IF ... ELSE ... ENDIF At run-time, ENDIF serves only as the destination of a forward branch from IF or ELSE. It marks the conclusion of the conditional structure. THEN is another name for ENDIF. Both names are supported in fig-FORTH. See also IF and ELSE.
At compile-time, ENDIF computes the forward branch offset from addr to HERE and stores it at addr. n is used for error tests.
Реализация
Юрий Семёнов приводит следующее описание слова THEN (стр. 59):
: THEN ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE
У Баранова-Ноздрунова определение слова THEN выглядит так (стр. 58):
: THEN ( A,1 ---> ) 1 ?PAIRS >RESOLVE ; IMMEDIATE
Описание слова THEN и определение IF…ELSE…THEN в ядре ФОРТ-ЕС:
THEN HK А,2-> /КОМПИЛЯЦИЯ/ КОНЕЦ ВЕТВЛЕНИЯ "IF" 47 -> /ИСПОЛНЕНИЕ/ Экран номер 47 ( 31.03.86 СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ ) : IF ?COMP COMPILE ?BRANCH >MARK 2 ; IMMEDIATE : THEN 2 ?PAIRS >RESOLVE ; IMMEDIATE : ELSE 2 ?PAIRS COMPILE BRANCH >MARK SWAP >RESOLVE 2 ; IMMEDIATE
Определение слова THEN в FORTH ИТЭФ:
HEAD 304Q,'THE',316Q,THEN,$COL ; THEN DW QCOMP,TWO,QPAIR,HERE,OVER,SUB,SWAP,STORE,SEMI
Ссылки
- Исходный текст слова THEN в Каллисто Классик 1.0
- Слово THEN и комментарий к нему в стандарте ANS Forth (англ.)
- Слово THEN и комментарий к нему в черновике Forth 200x (англ.)
- КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ" в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Decisions, Decisions… в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |