Редактирование: THEN
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
[[Файл:CallistoIf.png|thumb|right|264px|Пример работы слова THEN]] | |||
'''THEN''' (тогда, то) — стандартное слово [[Каллисто]]. | '''THEN''' (тогда, то) — стандартное слово [[Каллисто]]. | ||
[[ | Конец ветвления "[[IF]]". | ||
== Ввод слова THEN == | == Ввод слова THEN == | ||
Строка 7: | Строка 8: | ||
== THEN в стандарте ANS Forth == | == THEN в стандарте ANS Forth == | ||
6.1.2270 THEN CORE | 6.1.2270 THEN CORE | ||
Интерпретация: Семантика интерпретации для этого слова не определена. | Интерпретация: Семантика интерпретации для этого слова не определена. | ||
Строка 26: | Строка 26: | ||
или | или | ||
: X ... test IF ... ELSE ... THEN ... ; | : X ... test IF ... ELSE ... THEN ... ; | ||
== 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 >RESOLVE ; IMMEDIATE | : THEN >RESOLVE ; IMMEDIATE | ||
== 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: | Строка 49: | ||
(when no ELSE is present). | (when no ELSE is present). | ||
== THEN в fig-FORTH Release 1 glossary, май 1979 (англ.) == | |||
THEN P,CO,L0 | THEN P,CO,L0 | ||
An alias for ENDIF. | An alias for ENDIF. | ||
Строка 82: | Строка 65: | ||
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 является одним из самых древних сохранившихся слов Форта. | |||
Оно появилось в программе 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 == | ||
Юрий Семёнов приводит следующее описание слова THEN (стр. 59): | Юрий Семёнов приводит следующее описание слова THEN (стр. 59): | ||
: THEN ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE | : THEN ?COMP 2 ?PAIR HERE OVER - ↔ ! ; IMMEDIATE | ||
Строка 133: | Строка 96: | ||
SWAP >RESOLVE 2 ; IMMEDIATE | SWAP >RESOLVE 2 ; IMMEDIATE | ||
</pre> | </pre> | ||
== Ссылки == | == Ссылки == | ||
* Слово [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://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://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] ''(англ.)'' | * [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | ||
Строка 154: | Строка 110: | ||
[[Категория:Слова с признаком IMMEDIATE]] | [[Категория:Слова с признаком IMMEDIATE]] | ||
[[Категория:Структуры управления Каллисто]] | [[Категория:Структуры управления Каллисто]] | ||
[[Категория:Слова | [[Категория:Слова Каллисто без стековых диаграмм]] | ||