LEAVE: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 23: Строка 23:
  Типичное использование:
  Типичное использование:
         : X ... DO ... IF ... LEAVE THEN ... LOOP ... ;
         : X ... DO ... IF ... LEAVE THEN ... LOOP ... ;


== LEAVE в предыдущем стандарте Forth-83 (англ.) ==
== LEAVE в предыдущем стандарте Forth-83 (англ.) ==
Строка 37: Строка 36:
           nested within the do-loop structure.  More than one LEAVE
           nested within the do-loop structure.  More than one LEAVE
           may appear within a do-loop.  See:  "9.3 Return Stack"
           may appear within a do-loop.  See:  "9.3 Return Stack"


== LEAVE в стандарте Forth-79 (англ.) ==
== LEAVE в стандарте Forth-79 (англ.) ==
Строка 46: Строка 44:
     proceeds  normally  until  the  loop  terminating  word  is
     proceeds  normally  until  the  loop  terminating  word  is
     encountered.
     encountered.


== LEAVE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
== LEAVE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
Строка 54: Строка 51:
         itself remains unchanged, and execution proceeds normally until LOOP
         itself remains unchanged, and execution proceeds normally until LOOP
         or +LOOP is encountered.
         or +LOOP is encountered.


== История ==
== История ==
Строка 60: Строка 56:


В круговом цикле на 64K (описанном у Баранова-Ноздрунова) старая реализация LEAVE перестала работать и стандарт Форта-83 утвердил новый вариант LEAVE (немедленно прерывающий цикл), как стандартный. Этот новый вариант и реализован в [[Каллисто]], где роль цикла DO выполняет более современный цикл [[FOR]] … [[NEXT]], взятый из colorFORTH'а.
В круговом цикле на 64K (описанном у Баранова-Ноздрунова) старая реализация LEAVE перестала работать и стандарт Форта-83 утвердил новый вариант LEAVE (немедленно прерывающий цикл), как стандартный. Этот новый вариант и реализован в [[Каллисто]], где роль цикла DO выполняет более современный цикл [[FOR]] … [[NEXT]], взятый из colorFORTH'а.


== Ссылки ==
== Ссылки ==
Строка 71: Строка 66:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Слова Каллисто без стековых диаграмм]]

Версия от 14:28, 19 марта 2016

LEAVE (выйти) — стандартное слово Каллисто.

Досрочно и немедленно прерывает цикл FOR .. NEXT. Управление передаётся на слово, следующее после ближайшего NEXT.

Ввод слова LEAVE

В режиме ЛАТ последовательно нажмите клавиши     ИП   ШГ←      ИП 

LEAVE в стандарте ANS Forth

6.1.1760   LEAVE                                                           CORE
       Интерпретация: Семантика интерпретации для этого слова не определена.
       Выполнение: ( -- )  ( R: loop-sys -- )
           Снимает текущие параметры управления циклом. Неопределенная 
           ситуация существует, если они недоступны. Продолжает выполнение 
           непосредственно вне самого внутреннего синтаксически окруженного DO 
           ... LOOP или DO ... +LOOP.
       См.: 3.2.3.3 Стек возвратов, 6.1.0140 +LOOP, 6.1.1800 LOOP.
A.6.1.1760   LEAVE
Заметьте, что LEAVE немедленно завершает цикл. Никакие слова после LEAVE в 
пределах цикла не будут выполнены. 
Типичное использование:
       : X ... DO ... IF ... LEAVE THEN ... LOOP ... ;

LEAVE в предыдущем стандарте Forth-83 (англ.)

     LEAVE        --                            C,I,83
                  --   (compiling)
          Transfers execution to just beyond the next LOOP or +LOOP .
          The loop is terminated and loop control parameters are
          discarded.  May only be used in the form:
                  DO ... LEAVE ... LOOP
          or
                  DO ... LEAVE ... +LOOP
          LEAVE may appear within other control structures which are
          nested within the do-loop structure.  More than one LEAVE
          may appear within a do-loop.  See:  "9.3 Return Stack"

LEAVE в стандарте Forth-79 (англ.)

LEAVE                                        C,213
    Force  termination  of a DO-LOOP at the next LOOP or +LOOP  by
    setting  the  loop  limit equal to the current  value  of  the
    index.   The  index itself remains  unchanged,  and  execution
    proceeds   normally   until  the  loop  terminating  word   is
    encountered.

LEAVE в fig-FORTH Release 1 glossary, май 1979 (англ.)

LEAVE                                         C,L0
       Force termination of a DO-LOOP at the next opportunity by setting
       the loop limit equal to the current value of the index. The index
       itself remains unchanged, and execution proceeds normally until LOOP
       or +LOOP is encountered.

История

Реализация слова LEAVE в fig-Форте приравнивала счётчик цикла DO…LOOP к его границе, в результате чего последующее слово LOOP не выполняло переход на очередной цикл DO. 16-битный цикл DO…LOOP тех времён имел изъян. Он не позволял сделать просмотр адресов на границе 32Кб, например 32760 10 TYPE выдавало ошибку. Это вынудило провести реформу цикла DO…LOOP.

В круговом цикле на 64K (описанном у Баранова-Ноздрунова) старая реализация LEAVE перестала работать и стандарт Форта-83 утвердил новый вариант LEAVE (немедленно прерывающий цикл), как стандартный. Этот новый вариант и реализован в Каллисто, где роль цикла DO выполняет более современный цикл FORNEXT, взятый из colorFORTH'а.

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.