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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''UNTIL''' (до, пока не) — стандартное слово [[Каллисто]]. Проверка постусловия цикла «до».
UNTIL          ( ф −− )                            Если ф ложен (ф=0), повторить цикл BEGIN UNTIL ещё раз.
[[Файл:indefinite.gif|thumb|right|491px|Цикл BEGIN xxx f UNTIL всегда выполняется хотя бы 1 раз.<br>Картинка из книги Лео Броди «Starting FORTH»]]
[[Файл:indefinite.gif|thumb|right|491px|Цикл BEGIN xxx f UNTIL всегда выполняется хотя бы 1 раз.<br>Картинка из книги Лео Броди «Starting FORTH»]]
Конец описания [[Цикл BEGIN-UNTIL|цикла "BEGIN UNTIL"]]. Используется вместе со словом [[BEGIN]]:
'''UNTIL''' (до, пока не) — стандартное слово [[Каллисто]].
BEGIN тело-цикла условие UNTIL
 
Конец описания [[Цикл BEGIN-UNTIL|цикла "BEGIN UNTIL"]].


== Ввод слова UNTIL ==
== Ввод слова UNTIL ==
Строка 9: Строка 8:


== UNTIL в стандарте ANS Forth ==
== UNTIL в стандарте ANS Forth ==
<pre>
  6.1.2390  UNTIL                                                          CORE
  6.1.2390  UNTIL                                                          CORE
         Интерпретация: Семантика интерпретации для этого слова не определена.
         Интерпретация: Семантика интерпретации для этого слова не определена.
Строка 26: Строка 24:
  Типичное использование:
  Типичное использование:
         : X ... BEGIN ... test 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 в предыдущем стандарте Forth-83 (англ.) ==
       UNTIL        flag --                      C,I,79
       UNTIL        flag --                      C,I,79
                   sys --  (compiling)
                   sys --  (compiling)
Строка 46: Строка 36:
           corresponding BEGIN .  See:  BEGIN
           corresponding BEGIN .  See:  BEGIN


=== UNTIL в стандарте Forth-79 (англ.) ===
== UNTIL в стандарте Forth-79 (англ.) ==
  UNTIL          flag --                      I,C,,237
  UNTIL          flag --                      I,C,,237
     Within a colon-definition, mark the end of a BEGIN-UNTIL loop,
     Within a colon-definition, mark the end of a BEGIN-UNTIL loop,
Строка 53: Строка 43:
     first word after BEGIN.  BEGIN-UNTIL structures may be nested.
     first word after BEGIN.  BEGIN-UNTIL structures may be nested.


=== UNTIL в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== UNTIL в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  UNTIL          f --- (run-time)      addr n --- (compile) P,C2,L0
  UNTIL          f --- (run-time)      addr n --- (compile) P,C2,L0
         Occurs within a colon-definition in the form:
         Occurs within a colon-definition in the form:
Строка 66: Строка 56:


== Реализация ==
== Реализация ==
На этапе компиляции 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 (стр. 65):
   : UNTIL  1 ?PAIR COMPILE ?BRANCH <RESOLVE ; IMMEDIATE
   : UNTIL  1 ?PAIR COMPILE ?BRANCH <RESOLVE ; IMMEDIATE
Строка 128: Строка 78:
             DW  ONE,QPAIR,COMP,ZBRAN,BACK,SEMI
             DW  ONE,QPAIR,COMP,ZBRAN,BACK,SEMI
</PRE>
</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|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.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://forth-standard.org/standard/core/UNTIL UNTIL] и [http://forth-standard.org/standard/rationale#rat:core:UNTIL комментарий к нему] в черновике Forth 200x ''(англ.)''
Строка 145: Строка 99:
[[Категория:Слова с признаком IMMEDIATE]]
[[Категория:Слова с признаком IMMEDIATE]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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