UNTIL: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 7: | Строка 7: | ||
== Ввод слова UNTIL == | == Ввод слова UNTIL == | ||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите белые клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите белые клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] | ||
== UNTIL в стандарте ANS Forth == | == UNTIL в стандарте ANS Forth == | ||
Строка 69: | Строка 66: | ||
== Реализация == | == Реализация == | ||
На этапе компиляции 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> | |||
=== Советская реализация === | |||
Юрий Семёнов приводит следующее описание слова UNTIL (стр. 65): | Юрий Семёнов приводит следующее описание слова UNTIL (стр. 65): | ||
: UNTIL 1 ?PAIR COMPILE ?BRANCH <RESOLVE ; IMMEDIATE | : UNTIL 1 ?PAIR COMPILE ?BRANCH <RESOLVE ; IMMEDIATE |
Версия от 01:04, 10 ноября 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
Советская реализация
Юрий Семёнов приводит следующее описание слова 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 (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |