UNTIL: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показано 47 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''UNTIL''' — стандартное слово [[Каллисто]]. | '''UNTIL''' (до, пока не) — стандартное слово [[Каллисто]]. Проверка постусловия цикла «до». | ||
UNTIL ( ф −− ) Если ф ложен (ф=0), повторить цикл BEGIN UNTIL ещё раз. | |||
[[Файл:indefinite.gif|thumb|right|491px|Цикл BEGIN xxx f UNTIL всегда выполняется хотя бы 1 раз.<br>Картинка из книги Лео Броди «Starting FORTH»]] | |||
Конец описания [[Цикл BEGIN-UNTIL|цикла "BEGIN UNTIL"]]. Используется вместе со словом [[BEGIN]]: | |||
BEGIN тело-цикла условие UNTIL | |||
== Ввод слова UNTIL == | |||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите белые клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] | |||
== UNTIL в стандарте ANS Forth == | |||
<pre> | |||
6.1.2390 UNTIL CORE | |||
Интерпретация: Семантика интерпретации для этого слова не определена. | |||
Компиляция: ( C: dest -- ) | |||
Добавляет семантику времени-выполнения, данную ниже к текущему | |||
определению, разрешая ссылку назад dest. | |||
Время-выполнения: ( x -- ) | |||
Если все биты x нулевые, продолжает выполнение с адреса ячейки | |||
определенного dest. | |||
См.: 6.1.0760 BEGIN. | |||
A.6.1.2390 UNTIL | |||
Типичное использование: | |||
: X ... BEGIN ... test UNTIL ... ; | |||
</pre> | |||
== История == | |||
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово UNTIL под именем END | |||
Слово END, как синоним UNTIL, допускали Форт-83, Форт-79 и fig-Форт. | |||
Создатель Форта Чак Мур признался, что заимствовал цикл BEGIN…UNTIL из языка Алгол. | |||
=== UNTIL в предыдущем стандарте Forth-83 (англ.) === | |||
UNTIL flag -- C,I,79 | |||
sys -- (compiling) | |||
Used in the form: | |||
BEGIN ... flag UNTIL | |||
Marks the end of a BEGIN-UNTIL loop which will terminate | |||
based on flag. If flag is true, the loop is terminated. If | |||
flag is false, execution continues to just after the | |||
corresponding BEGIN . sys is balanced with its | |||
corresponding BEGIN . See: BEGIN | |||
=== UNTIL в стандарте Forth-79 (англ.) === | |||
UNTIL flag -- I,C,,237 | |||
Within a colon-definition, mark the end of a BEGIN-UNTIL loop, | |||
which will terminate based on flag. If flag is true, the loop | |||
is terminated. If flag is false, execution returns to the | |||
first word after BEGIN. BEGIN-UNTIL structures may be nested. | |||
=== UNTIL в fig-FORTH Release 1 glossary, май 1979 (англ.) === | |||
UNTIL f --- (run-time) addr n --- (compile) P,C2,L0 | |||
Occurs within a colon-definition in the form: | |||
BEGIN ... UNTIL | |||
At run-time, UNTIL controls the conditional branch back to the | |||
corresponding BEGIN. If f is false, execution returns to just after. | |||
BEGIN; | |||
if true, execution continues ahead. | |||
At compile-time, UNTIL compiles (0BRANCH) and an offset from HERE to | |||
addr. n is used for error tests. | |||
== Реализация == | |||
На этапе компиляции UNTIL может вызывать [[Авост приложения|авост]]. | |||
<pre> | |||
3659 RLRESOLVE: .DW LITP | |||
3660 .DB 39,17 ; 10001 | |||
3661 .DW SUB, BRAN,RCOMMA | |||
3662 | |||
3663 ;#UNTIL | |||
3664 ; UNTIL I ( ф −− ) Если ф ложен (ф=0), повторить цикл BEGIN UNTIL ещё раз. | |||
3665 LUNTIL: .DB 85H | |||
3666 .TEXT "UNTIL" ; ( флаг −− ) | |||
3667 .DW LLRESOLVE ; Конец цикла "BEGIN UNTIL". | |||
3668 UNTIL: .DW CALL, ONE,QPAIR, COMP,ZBRAND, BRAN,RLRESOLVE | |||
</pre> | |||
Реализации из SP-Forth 4.20: | |||
<pre> | |||
: UNTIL \ 94 | |||
\ Интерпретация: семантика неопределена. | |||
\ Компиляция: ( C: dest -- ) | |||
\ Добавить семантику времени выполнения, данную ниже, к текущему определению. | |||
\ Разрешить ссылку назад dest. | |||
\ Время выполнения: ( x -- ) | |||
\ Если все биты x нулевые, продолжать выполнение с позиции, заданной dest. | |||
?COMP 3 <> IF -2004 THROW THEN \ ABORT" UNTIL без BEGIN !" | |||
?BRANCH, | |||
0xFFFFFF80 DP @ 4 - @ U< | |||
IF DP @ 5 - W@ 0x3F0 + DP @ 6 - W! -4 ALLOT | |||
THEN DP @ TO :-SET | |||
; IMMEDIATE | |||
</pre> | |||
<pre> | |||
: UNTIL \ 94 | |||
?COMP 3 <> IF -2004 THROW THEN \ ABORT" UNTIL без BEGIN !" | |||
TC-?BRANCH, | |||
0xFFFFFF80 DP @ 4 - @ U< | |||
IF DP @ 5 - W@ 0x3F0 + DP @ 6 - W! -4 ALLOT | |||
THEN DP @ TO :-SET | |||
; IMMEDIATE | |||
</pre> | |||
=== Советская реализация === | |||
Юрий Семёнов приводит следующее описание слова UNTIL (стр. 65): | |||
: UNTIL 1 ?PAIR COMPILE ?BRANCH <RESOLVE ; IMMEDIATE | |||
У Баранова-Ноздрунова определение слова UNTIL выглядит так (стр. 58): | |||
: UNTIL ( A1,2 ---> ) 2 ?PAIRS | |||
COMPILE ?BRANCH <RESOLVE ; IMMEDIATE | |||
Описание слова UNTIL и определение [[Цикл BEGIN-UNTIL|цикла BEGIN…UNTIL]] в ядре ФОРТ-ЕС: | |||
<pre> | |||
UNTIL HK A,1-> /КОМПИЛЯЦИЯ/ КОНЕЦ ЦИКЛА "BEGIN UNTIL" 47 | |||
F-> /ИСПОЛНЕНИЕ/ | |||
Экран номер 47 | |||
( 31.03.86 СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ ) | |||
: BEGIN ?COMP <MARK 1 ; IMMEDIATE | |||
: UNTIL 1 ?PAIRS COMPILE ?BRANCH <RESOLVE ; IMMEDIATE | |||
</pre> | |||
Определение слова UNTIL в FORTH ИТЭФ: | |||
<PRE> | |||
HEAD 305Q,'UNTI',314Q,UNTIL,$COL ; UNTIL | |||
DW ONE,QPAIR,COMP,ZBRAN,BACK,SEMI | |||
</PRE> | |||
== Ссылка == | == Ссылка == | ||
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2390 | * {{Исходник|UNTIL|UNTIL}} | ||
* См. слово [[BEGIN]] | |||
* См. также слова [[WHILE]] и [[REPEAT]] | |||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2390 UNTIL] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2390 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | |||
* Слово [http://forth-standard.org/standard/core/UNTIL UNTIL] и [http://forth-standard.org/standard/rationale#rat:core:UNTIL комментарий к нему] в черновике Forth 200x ''(англ.)'' | |||
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\06.ZIKLITESKIE%20STRUKTURY ЦИКЛИЧЕСКИЕ СТРУКТУРЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | |||
* [https://en.wikipedia.org/wiki/Do_while_loop Do while loop в английской Википедии] ''(англ.)'' | * [https://en.wikipedia.org/wiki/Do_while_loop Do while loop в английской Википедии] ''(англ.)'' | ||
* [http://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Слова высокого уровня]] | |||
[[Категория:Слова с признаком IMMEDIATE]] | |||
[[Категория:Структуры управления Каллисто]] | [[Категория:Структуры управления Каллисто]] | ||
[[Категория:Слова, способные вызывать авост приложения]] | |||
[[Категория:Компилирующие слова]] | |||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 19:17, 13 ноября 2017
UNTIL (до, пока не) — стандартное слово Каллисто. Проверка постусловия цикла «до».
UNTIL ( ф −− ) Если ф ложен (ф=0), повторить цикл BEGIN UNTIL ещё раз.
Конец описания цикла "BEGIN UNTIL". Используется вместе со словом BEGIN:
BEGIN тело-цикла условие UNTIL
Ввод слова UNTIL[править]
В режиме ЛАТ последовательно нажмите белые клавиши 3 4 2 7 −
UNTIL в стандарте ANS Forth[править]
6.1.2390 UNTIL CORE Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: ( C: dest -- ) Добавляет семантику времени-выполнения, данную ниже к текущему определению, разрешая ссылку назад dest. Время-выполнения: ( x -- ) Если все биты x нулевые, продолжает выполнение с адреса ячейки определенного dest. См.: 6.1.0760 BEGIN. A.6.1.2390 UNTIL Типичное использование: : X ... BEGIN ... test UNTIL ... ;
История[править]
В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово UNTIL под именем END
Слово END, как синоним UNTIL, допускали Форт-83, Форт-79 и fig-Форт.
Создатель Форта Чак Мур признался, что заимствовал цикл BEGIN…UNTIL из языка Алгол.
UNTIL в предыдущем стандарте Forth-83 (англ.)[править]
UNTIL flag -- C,I,79 sys -- (compiling) Used in the form: BEGIN ... flag UNTIL Marks the end of a BEGIN-UNTIL loop which will terminate based on flag. If flag is true, the loop is terminated. If flag is false, execution continues to just after the corresponding BEGIN . sys is balanced with its corresponding BEGIN . See: BEGIN
UNTIL в стандарте Forth-79 (англ.)[править]
UNTIL flag -- I,C,,237 Within a colon-definition, mark the end of a BEGIN-UNTIL loop, which will terminate based on flag. If flag is true, the loop is terminated. If flag is false, execution returns to the first word after BEGIN. BEGIN-UNTIL structures may be nested.
UNTIL в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
UNTIL f --- (run-time) addr n --- (compile) P,C2,L0 Occurs within a colon-definition in the form: BEGIN ... UNTIL At run-time, UNTIL controls the conditional branch back to the corresponding BEGIN. If f is false, execution returns to just after. BEGIN; if true, execution continues ahead.
At compile-time, UNTIL compiles (0BRANCH) and an offset from HERE to addr. n is used for error tests.
Реализация[править]
На этапе компиляции UNTIL может вызывать авост.
3659 RLRESOLVE: .DW LITP 3660 .DB 39,17 ; 10001 3661 .DW SUB, BRAN,RCOMMA 3662 3663 ;#UNTIL 3664 ; UNTIL I ( ф −− ) Если ф ложен (ф=0), повторить цикл BEGIN UNTIL ещё раз. 3665 LUNTIL: .DB 85H 3666 .TEXT "UNTIL" ; ( флаг −− ) 3667 .DW LLRESOLVE ; Конец цикла "BEGIN UNTIL". 3668 UNTIL: .DW CALL, ONE,QPAIR, COMP,ZBRAND, BRAN,RLRESOLVE
Реализации из SP-Forth 4.20:
: UNTIL \ 94 \ Интерпретация: семантика неопределена. \ Компиляция: ( C: dest -- ) \ Добавить семантику времени выполнения, данную ниже, к текущему определению. \ Разрешить ссылку назад dest. \ Время выполнения: ( x -- ) \ Если все биты x нулевые, продолжать выполнение с позиции, заданной dest. ?COMP 3 <> IF -2004 THROW THEN \ ABORT" UNTIL без BEGIN !" ?BRANCH, 0xFFFFFF80 DP @ 4 - @ U< IF DP @ 5 - W@ 0x3F0 + DP @ 6 - W! -4 ALLOT THEN DP @ TO :-SET ; IMMEDIATE
: UNTIL \ 94 ?COMP 3 <> IF -2004 THROW THEN \ ABORT" UNTIL без BEGIN !" TC-?BRANCH, 0xFFFFFF80 DP @ 4 - @ U< IF DP @ 5 - W@ 0x3F0 + DP @ 6 - W! -4 ALLOT THEN DP @ TO :-SET ; IMMEDIATE
Советская реализация[править]
Юрий Семёнов приводит следующее описание слова UNTIL (стр. 65):
: UNTIL 1 ?PAIR COMPILE ?BRANCH <RESOLVE ; IMMEDIATE
У Баранова-Ноздрунова определение слова UNTIL выглядит так (стр. 58):
: UNTIL ( A1,2 ---> ) 2 ?PAIRS COMPILE ?BRANCH <RESOLVE ; IMMEDIATE
Описание слова UNTIL и определение цикла BEGIN…UNTIL в ядре ФОРТ-ЕС:
UNTIL HK A,1-> /КОМПИЛЯЦИЯ/ КОНЕЦ ЦИКЛА "BEGIN UNTIL" 47 F-> /ИСПОЛНЕНИЕ/ Экран номер 47 ( 31.03.86 СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ ) : BEGIN ?COMP <MARK 1 ; IMMEDIATE : UNTIL 1 ?PAIRS COMPILE ?BRANCH <RESOLVE ; IMMEDIATE
Определение слова UNTIL в FORTH ИТЭФ:
HEAD 305Q,'UNTI',314Q,UNTIL,$COL ; UNTIL DW ONE,QPAIR,COMP,ZBRAN,BACK,SEMI
Ссылка[править]
- Исходный текст слова UNTIL в Каллисто Классик 1.0
- См. слово BEGIN
- См. также слова WHILE и REPEAT
- Слово UNTIL и комментарий к нему в стандарте ANS Forth (англ.)
- Слово UNTIL и комментарий к нему в черновике Forth 200x (англ.)
- ЦИКЛИЧЕСКИЕ СТРУКТУРЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Do while loop в английской Википедии (англ.)
- Throw It For a Loop в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |