Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''UNLOOP''' (разциклить, читается «анлуп») — стандартное слово [[Каллисто]]. | | '''UNLOOP''' — стандартное слово [[Каллисто]]. |
| UNLOOP ( −− ) Снять со стека возвратов параметры управления циклом FOR
| |
| для текущего уровня вложенности.
| |
| Слово UNLOOP снимает со [[Стек возвратов Каллисто|стека возвратов]] служебную информацию одного цикла [[FOR]] … [[NEXT]], что позволяет использовать слово [[EXIT]] для досрочного выхода из определения. Чтобы покинуть слово изнутри несколько вложенных циклов [[FOR]] … [[NEXT]], требуется предварительно выполнить слово UNLOOP нужное число раз.
| |
|
| |
|
| Также (это характерно для [[Каллисто]], но не работает в большинстве Фортов) слово UNLOOP можно использовать перед словом [[LEAVE]], чтобы выйти сразу из нескольких вложенных циклов [[FOR]].
| | Обеспечивает досрочный выход из цикла [[FOR]] … [[NEXT]]. |
|
| |
|
| Хотя само слово UNLOOP не влияет на [[Стек данных|стек]], надо учитывать, что слова после [[NEXT]] чаще всего ожидают некоторое определённое состояние [[Стек данных|стека]].
| |
|
| |
| == Ввод слова UNLOOP ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите белые клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 6|{{Серая клавиша|6}}]]
| |
|
| |
|
| == UNLOOP в стандарте ANS Forth == | | == UNLOOP в стандарте ANS Forth == |
| <PRE>
| |
| 6.1.2380 UNLOOP CORE | | 6.1.2380 UNLOOP CORE |
| Интерпретация: Семантика интерпретации для этого слова не определена. | | Интерпретация: Семантика интерпретации для этого слова не определена. |
Строка 36: |
Строка 28: |
| связанной do-loop конструкции. UNLOOP как функция был назван UNDO. UNLOOP более | | связанной do-loop конструкции. UNLOOP как функция был назван UNDO. UNLOOP более |
| выражает действие: ничто не отменяется - мы просто прекращаем делать это. | | выражает действие: ничто не отменяется - мы просто прекращаем делать это. |
| </PRE>
| |
|
| |
| == Замечание ==
| |
| Хотя в стандарте ANS Forth это явно не указано, после слова UNLOOP должно быть исполнено слово [[EXIT]]. Конечно, между ними могут быть выполнены и другие действия. Но если [[EXIT]] не будет выполнен до конца цикла, ситуация станет неопределённой.
| |
|
| |
| Также UNLOOP может быть использован перед словом [[LEAVE]], если требуется завершить внешний цикл.
| |
|
| |
| UNLOOP может быть использован несколько раз, для выхода из вложенных циклов.
| |
|
| |
|
| == Реализация ==
| |
| <pre>
| |
| 719 JUNLOOP: 4 ; Обработчик UNLOOP
| |
| 720 NLEV: RM2 + M2 ; Убрать из стека возвратов два слова, счётчик и адрес
| |
| 721 KGOTO9
| |
| …
| |
| 1787 ;#UNLOOP
| |
| 1788 ; UNLOOP ( −− ) Снять со стека возвратов параметры управления циклом FOR для текущего уровня вложенности.
| |
| 1789 LUNLOOP: .DB 6
| |
| 1790 .TEXT "UNLOOP"
| |
| 1791 .DW LLEAVE
| |
| 1792 UNLOOP: .DW JUNLOOP ; Обычно используется перед EXIT для выхода изнутри цикла со счётчиком.
| |
| </pre>
| |
| Реализации из SP-Forth 4.20:
| |
| <pre>
| |
| : UNLOOP \ 94
| |
| \ Интерпретация: семантика неопределена.
| |
| \ Выполнение: ( -- ) ( R: loop-sys -- )
| |
| \ Убрать параметры цикла текущего уровня. UNLOOP требуется для каждого
| |
| \ уровня вложения циклов перед выходом из определения по EXIT.
| |
| \ Неоднозначная ситуация возникает, если параметры цикла недоступны.
| |
| ?COMP
| |
| SetOP 0C24648D , \ lea esp, 0c [esp]
| |
| ; IMMEDIATE
| |
| </pre>
| |
| <pre>
| |
| : UNLOOP \ 94
| |
| ?COMP
| |
| SetOP 0C24648D , \ lea esp, 0c [esp]
| |
| ; IMMEDIATE
| |
| </pre>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|UNLOOP|UNLOOP}} | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2380 Слово UNLOOP в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2380 комментарии к нему] ''(англ.)'' |
| * См. слова [[EXIT]], [[LEAVE]], [[RDROP]], [[FOR]], [[NEXT]], [[Слово I|I]], [[Слово J|J]] и [[Слово K|K]]
| | * [http://www.forth200x.org/documents/html/core.html#core:UNLOOP Слово UNLOOP в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:UNLOOP комментарий к нему] ''(англ.)'' |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2380 UNLOOP] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2380 комментарий к нему] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth-standard.org/standard/core/UNLOOP UNLOOP] и [http://forth-standard.org/standard/rationale#rat:core:UNLOOP комментарий к нему] в черновике Forth 200x ''(англ.)'' | |
|
| |
|
|
| |
|
Строка 87: |
Строка 38: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Структуры управления Каллисто]] | | [[Категория:Структуры управления Каллисто]] |
| [[Категория:Операции со стеком возвратов Каллисто]]
| |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |