THEN: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показано 28 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''THEN''' (тогда, то) — стандартное слово [[Каллисто]]. | |||
THEN ( −− ) Конец ветвления IF. | |||
[[Файл:CallistoIf.png|thumb|right|264px|Пример работы слова THEN]] | [[Файл:CallistoIf.png|thumb|right|264px|Пример работы слова THEN]] | ||
== Ввод слова THEN == | == Ввод слова THEN == | ||
Строка 8: | Строка 7: | ||
== THEN в стандарте ANS Forth == | == THEN в стандарте ANS Forth == | ||
<pre> | |||
6.1.2270 THEN CORE | 6.1.2270 THEN CORE | ||
Интерпретация: Семантика интерпретации для этого слова не определена. | Интерпретация: Семантика интерпретации для этого слова не определена. | ||
Строка 26: | Строка 26: | ||
или | или | ||
: X ... test IF ... ELSE ... THEN ... ; | : X ... test IF ... ELSE ... THEN ... ; | ||
</pre> | |||
== История == | |||
Слово THEN является одним из самых древних сохранившихся слов Форта. | |||
Оно появилось в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году ([https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_SLAC Национальная ускорительная лаборатория SLAC], [https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%8D%D0%BD%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82 Стэнфордский университет]). | |||
В 1970 году «условные операторы» (''англ.'' Conditional statements) IF ELSE THEN были реализованы Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500. | |||
Следущий код B-5500 FORTH проверял вершину стека на истинность и дублировал её, если она истина (аналог [[?DUP]]): | |||
IF DUP THEN | |||
В 1971-73 годах Чак Мур перенёс Форт на DEC PDP-11 в [https://en.wikipedia.org/wiki/National_Radio_Astronomy_Observatory National Radio Astronomy Observatory] (''англ.'', [https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%80%D0%BB%D0%BE%D1%82%D1%81%D0%B2%D0%B8%D0%BB%D0%BB_%28%D0%92%D0%B8%D1%80%D0%B3%D0%B8%D0%BD%D0%B8%D1%8F%29 Шарлотсвилл]). Появился ''косвенный шитый код'' (''англ.'' indirect-threaded code), который изменил структуры управления, включая IF … THEN. Они получили элегантную реализацию с адресами на [[Стек данных|стеке данных]] во время компиляции. | |||
В некоторых старых Фортах слово THEN называлось ENDIF | |||
В Форте-94 кроме IF … THEN слово THEN также употребляется в контексте безусловного перехода вперёд AHEAD … THEN | |||
== THEN в предыдущем стандарте Forth-83 (англ.) == | === THEN в предыдущем стандарте Forth-83 (англ.) === | ||
THEN -- C,I,79 | THEN -- C,I,79 | ||
sys -- (compiling) | sys -- (compiling) | ||
Строка 39: | Строка 55: | ||
corresponding IF or ELSE . See: IF ELSE | corresponding IF or ELSE . See: IF ELSE | ||
=== Пример реализации THEN из предыдущего стандарта Forth-83 === | |||
== Пример реализации THEN из предыдущего стандарта Forth-83 == | |||
: THEN >RESOLVE ; IMMEDIATE | : THEN >RESOLVE ; IMMEDIATE | ||
=== THEN в стандарте Forth-79 (англ.) === | |||
== THEN в стандарте Forth-79 (англ.) == | |||
THEN I,C,161 | THEN I,C,161 | ||
Used in a colon-definition in the form: | Used in a colon-definition in the form: | ||
Строка 52: | Строка 66: | ||
(when no ELSE is present). | (when no ELSE is present). | ||
=== THEN в fig-FORTH Release 1 glossary, май 1979 (англ.) === | |||
== THEN в fig-FORTH Release 1 glossary, май 1979 (англ.) == | |||
THEN P,CO,L0 | THEN P,CO,L0 | ||
An alias for ENDIF. | An alias for ENDIF. | ||
Строка 69: | Строка 82: | ||
to HERE and stores it at addr. n is used for error tests. | to HERE and stores it at addr. n is used for error tests. | ||
== Реализация == | |||
На этапе компиляции THEN может вызывать [[Авост приложения|авост]]. | |||
<pre> | |||
3642 RGRESOLVE: .DW HERE, LITP | |||
3643 .DB 39,17 ; 10001 | |||
3644 .DW SUB, SWAP, STORE, EXIT | |||
… | |||
3684 ;#THEN | |||
3685 ; THEN I ( −− ) Конец ветвления IF. | |||
3686 LTHEN: .DB 84H | |||
3687 .TEXT "THEN" | |||
3688 .DW LBEGIN | |||
3689 THEN: .DW CALL | |||
3690 RTHEN: .DW TWO,QPAIR, BRAN,RGRESOLVE | |||
</pre> | |||
Реализации из SP-Forth 4.20: | |||
<pre> | |||
: THEN \ 94 | |||
\ Интерпретация: семантика неопределена. | |||
\ Компиляция: ( C: orig -- ) | |||
\ Разрешить ссылку вперед orig, используя позицию семантики выполнения. | |||
\ Добавить семантику времени выполнения, данную ниже, к текущему определению. | |||
\ Время выполнения: ( -- ) | |||
\ Продолжить выполнение. | |||
?COMP \ HERE TO :-SET | |||
>ORESOLVE | |||
; IMMEDIATE | |||
</pre> | |||
<pre> | |||
: THEN ?COMP TC>RESOLVE ; IMMEDIATE | |||
</pre> | |||
== | === Советская реализация === | ||
Юрий Семёнов приводит следующее описание слова THEN (стр. 59): | Юрий Семёнов приводит следующее описание слова THEN (стр. 59): | ||
: THEN ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE | : THEN ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE | ||
Строка 76: | Строка 120: | ||
У Баранова-Ноздрунова определение слова THEN выглядит так (стр. 58): | У Баранова-Ноздрунова определение слова THEN выглядит так (стр. 58): | ||
: THEN ( A,1 ---> ) 1 ?PAIRS >RESOLVE ; IMMEDIATE | : THEN ( A,1 ---> ) 1 ?PAIRS >RESOLVE ; IMMEDIATE | ||
Описание слова THEN и определение IF…ELSE…THEN в ядре ФОРТ-ЕС: | |||
<pre> | |||
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 | |||
</pre> | |||
Определение слова THEN в FORTH ИТЭФ: | |||
<PRE> | |||
HEAD 304Q,'THE',316Q,THEN,$COL ; THEN | |||
DW QCOMP,TWO,QPAIR,HERE,OVER,SUB,SWAP,STORE,SEMI | |||
</PRE> | |||
== Ссылки == | == Ссылки == | ||
* {{Исходник|THEN|THEN}} | |||
* См. слова [[IF]] и [[ELSE]], а также [[TRUE]] и [[FALSE]] | |||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2270 THEN] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2270 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2270 THEN] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2270 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http:// | * Слово [http://forth-standard.org/standard/core/THEN THEN] и [http://forth-standard.org/standard/rationale#rat:core:THEN комментарий к нему] в черновике Forth 200x ''(англ.)'' | ||
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\04.%20KOMPJUTER%20%22PRINIMAET%20RESENIA%22 КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ"] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | |||
* [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
Строка 85: | Строка 151: | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Слова высокого уровня]] | |||
[[Категория:Слова с признаком IMMEDIATE]] | |||
[[Категория:Структуры управления Каллисто]] | [[Категория:Структуры управления Каллисто]] | ||
[[Категория:Слова | [[Категория:Слова, способные вызывать авост приложения]] | ||
[[Категория:Компилирующие слова]] | |||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 19:21, 13 ноября 2017
THEN (тогда, то) — стандартное слово Каллисто.
THEN ( −− ) Конец ветвления IF.
Ввод слова THEN[править]
В режиме ЛАТ последовательно нажмите четыре клавиши 2 ПП ИП 4
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
В Форте-94 кроме IF … THEN слово THEN также употребляется в контексте безусловного перехода вперёд AHEAD … THEN
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 может вызывать авост.
3642 RGRESOLVE: .DW HERE, LITP 3643 .DB 39,17 ; 10001 3644 .DW SUB, SWAP, STORE, EXIT … 3684 ;#THEN 3685 ; THEN I ( −− ) Конец ветвления IF. 3686 LTHEN: .DB 84H 3687 .TEXT "THEN" 3688 .DW LBEGIN 3689 THEN: .DW CALL 3690 RTHEN: .DW TWO,QPAIR, BRAN,RGRESOLVE
Реализации из SP-Forth 4.20:
: THEN \ 94 \ Интерпретация: семантика неопределена. \ Компиляция: ( C: orig -- ) \ Разрешить ссылку вперед orig, используя позицию семантики выполнения. \ Добавить семантику времени выполнения, данную ниже, к текущему определению. \ Время выполнения: ( -- ) \ Продолжить выполнение. ?COMP \ HERE TO :-SET >ORESOLVE ; IMMEDIATE
: THEN ?COMP TC>RESOLVE ; IMMEDIATE
Советская реализация[править]
Юрий Семёнов приводит следующее описание слова 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
- См. слова IF и ELSE, а также TRUE и FALSE
- Слово THEN и комментарий к нему в стандарте ANS Forth (англ.)
- Слово THEN и комментарий к нему в черновике Forth 200x (англ.)
- КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ" в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Decisions, Decisions… в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |