Редактирование: THEN

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''THEN''' (тогда, то) — стандартное слово [[Каллисто]].
'''THEN''' (тогда, то) — стандартное слово [[Каллисто]].
THEN          ( −− )                              Конец ветвления IF.
 
[[Файл:CallistoIf.png|thumb|right|264px|Пример работы слова THEN]]
Конец ветвления "[[IF]]".


== Ввод слова THEN ==
== Ввод слова THEN ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 4|{{Серая клавиша|4}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 4|{{Серая клавиша|4}}]]


== THEN в стандарте ANS Forth ==
== THEN в стандарте ANS Forth ==
<pre>
  6.1.2270  THEN                                                            CORE
  6.1.2270  THEN                                                            CORE
         Интерпретация: Семантика интерпретации для этого слова не определена.
         Интерпретация: Семантика интерпретации для этого слова не определена.
Строка 26: Строка 25:
  или
  или
         : 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)
Строка 55: Строка 38:
           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:
Строка 66: Строка 51:
     (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.
Строка 82: Строка 68:
         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 ==
Юрий Семёнов приводит следующее описание слова THEN (стр. 59):
Юрий Семёнов приводит следующее описание слова THEN (стр. 59):
   : THEN  ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE
   : THEN  ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE
Строка 120: Строка 75:
У Баранова-Ноздрунова определение слова 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://forth-standard.org/standard/core/THEN THEN] и [http://forth-standard.org/standard/rationale#rat:core:THEN комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/THEN.html THEN] и [http://www.forth200x.org/documents/html3/rationale.html#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] ''(англ.)''




Строка 151: Строка 84:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова с признаком IMMEDIATE]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/THEN