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

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

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

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


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


== ELSE в стандарте ANS Forth ==
== ELSE в стандарте ANS Forth ==
<pre>
  6.1.1310  ELSE                                                            CORE
  6.1.1310  ELSE                                                            CORE
         Интерпретация: Семантика интерпретации для этого слова не определена.
         Интерпретация: Семантика интерпретации для этого слова не определена.
Строка 27: Строка 26:
  Типичное использование:
  Типичное использование:
         : X ... test IF ... ELSE ... THEN ;
         : X ... test IF ... ELSE ... THEN ;
</pre>
== История ==
Слово ELSE является одним из самых древних слов Форта.
Впервые слово ELSE появилось в программе 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 Стэнфордский университет]).
Необычный постфиксный условный оператор восходит к 1964 году:
  Алгол — IF выражение THEN истина ELSE ложь
  CURVE — стек IF истина ELSE ложь THEN
Истина интерпретировалась, если на стеке был не-нуль. THEN предлагал уникальное завершение, отсутствие которого в Алголе всегда вводило в замешательство Чака Мура. Такие выражения интерпретировались: IF сканировал вперёд до ELSE или THEN.
В 1970 году «условные операторы» (''англ.'' Conditional statements) IF ELSE THEN были реализованы Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500.


В {{colorForth}} исключён ELSE и при необходимости рекомендуется использовать ; внутри IF…THEN :
IF … ; THEN


=== ELSE в предыдущем стандарте Forth-83 (англ.) ===
== ELSE в предыдущем стандарте Forth-83 (англ.) ==
       ELSE        --                            C,I,79
       ELSE        --                            C,I,79
                   sys1 -- sys2  (compiling)
                   sys1 -- sys2  (compiling)
Строка 55: Строка 38:
           its corresponding THEN .  See:  IF  THEN
           its corresponding THEN .  See:  IF  THEN


=== ELSE в стандарте Forth-79 (англ.) ===
 
== ELSE в стандарте Forth-79 (англ.) ==
  ELSE          --                            I,C,167
  ELSE          --                            I,C,167
     Used in a colon-definition in the form:
     Used in a colon-definition in the form:
Строка 63: Строка 47:
     the stack.  (see IF)
     the stack.  (see IF)


=== ELSE в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
 
<pre>
== ELSE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  ELSE            addr1 n1 --- addr2 n2          (compiling) P,C2,L0
  ELSE            addr1 n1 --- addr2 n2          (compiling) P,C2,L0
         Occurs within a colon-definition in the form:
         Occurs within a colon-definition in the form:
Строка 76: Строка 60:
         resolves the pending forward branch from IF by calculating the
         resolves the pending forward branch from IF by calculating the
         offset from addr1 to HERE and storing at addr1.
         offset from addr1 to HERE and storing at addr1.
</pre>


== Реализация ==
На этапе компиляции ELSE может вызывать [[Авост приложения|авост]].
<pre>
3692 ;#ELSE
3693 ; ELSE          I ( −− )                              Начало второй ветви ветвления IF.
3694 LELSE:          .DB    84H
3695                .TEXT  "ELSE"
3696                .DW    LTHEN
3697 SELSE:          .DW CALL, TWO,QPAIR, COMP,BRAND, GMARK, SWAP, GRESOLVE, TWO, EXIT
</pre>
Реализации из SP-Forth 4.20:
<pre>
: ELSE \ 94
\ Интерпретация: семантика неопределена.
\ Компиляция: ( C: orig1 -- orig2 )
\ Положить на управляющий стек позицию новой неразрешенной ссылки вперед orig2.
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
\ Семантика незавершена, пока orig2 не разрешится (например, по THEN).
\ Разрешить ссылку вперед orig1, используя позицию следующей добавленной
\ семантики выполнения.
\ Время выполнения: ( -- )
\ Продолжить выполнение с позиции, заданной разрешением orig2.
  ?COMP 0 BRANCH,
  >ORESOLVE
  >MARK 2
; IMMEDIATE
</pre>
<pre>
: ELSE
  ?COMP 0 TC-BRANCH,
  TC>RESOLVE
  >MARK 2
; IMMEDIATE
</pre>


=== Советская реализация ===
== Реализация ELSE ==
У Баранова-Ноздрунова определение слова ELSE выглядит так (стр. 58):
У Баранова-Ноздрунова определение слова ELSE выглядит так (стр. 58):
  : ELSE  ( A1,1 ---> A2,1 )  1 ?PAIRS  COMPILE BRANCH
  : ELSE  ( A1,1 ---> A2,1 )  1 ?PAIRS  COMPILE BRANCH
       >MARK  ↔  >RESOLVE  1  ; IMMEDIATE
       >MARK  ↔  >RESOLVE  1  ; IMMEDIATE
Описание ELSE и определение IF…ELSE…THEN в ядре ФОРТ-ЕС:
<pre>
ELSE  HK A1,2->A2,2 /КОМПИЛЯЦИЯ/ НАЧАЛО 2-ОЙ ВЕТВИ            47
          -> /ИСПОЛНЕНИЕ/ ВЕТВЛЕНИЯ "IF"
                      Экран номер 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>
Определение слова ELSE в FORTH ИТЭФ:
<PRE>
            HEAD    304Q,'ELS',305Q,$ELSE,$COL          ; ELSE
            DW  TWO,QPAIR,COMP,BRAN,HERE,ZERO,COMMA
            DW  SWAP,TWO,THEM,TWO,SEMI
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|ELSE|ELSE}}
* См. слова [[IF]] и [[THEN]], а также [[TRUE]] и [[FALSE]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1310 ELSE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1310 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1310 ELSE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1310 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/ELSE ELSE] и [http://forth-standard.org/standard/rationale#rat:core:ELSE комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/ELSE.html ELSE] и [http://www.forth200x.org/documents/html3/rationale.html#rat:core:ELSE комментарий к нему] в черновике 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] ''(англ.)''




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

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

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