Редактирование: LEAVE
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 2: | Строка 2: | ||
LEAVE ( −− ) Закончить исполнение цикла FOR. | LEAVE ( −− ) Закончить исполнение цикла FOR. | ||
Досрочно и немедленно прерывает самый внутренний цикл [[FOR]] .. [[NEXT]]. Управление передаётся на слово, следующее после ближайшего [[NEXT]]. Обычно слово LEAVE используется изнутри [[IF|условного оператора]]. | Досрочно и немедленно прерывает самый внутренний цикл [[FOR]] .. [[NEXT]]. Управление передаётся на слово, следующее после ближайшего [[NEXT]]. Обычно слово LEAVE используется изнутри [[IF|условного оператора]]. | ||
== Ввод слова LEAVE == | == Ввод слова LEAVE == | ||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] {{ШГ←}} [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] | ||
== LEAVE в стандарте ANS Forth == | == LEAVE в стандарте ANS Forth == | ||
6.1.1760 LEAVE CORE | 6.1.1760 LEAVE CORE | ||
Интерпретация: Семантика интерпретации для этого слова не определена. | Интерпретация: Семантика интерпретации для этого слова не определена. | ||
Строка 26: | Строка 23: | ||
Типичное использование: | Типичное использование: | ||
: X ... DO ... IF ... LEAVE THEN ... LOOP ... ; | : X ... DO ... IF ... LEAVE THEN ... LOOP ... ; | ||
== LEAVE в предыдущем стандарте Forth-83 (англ.) == | |||
LEAVE -- C,I,83 | LEAVE -- C,I,83 | ||
-- (compiling) | -- (compiling) | ||
Строка 48: | Строка 37: | ||
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 C,213 | LEAVE C,213 | ||
Force termination of a DO-LOOP at the next LOOP or +LOOP by | Force termination of a DO-LOOP at the next LOOP or +LOOP by | ||
Строка 56: | Строка 45: | ||
encountered. | encountered. | ||
== LEAVE в fig-FORTH Release 1 glossary, май 1979 (англ.) == | |||
LEAVE C,L0 | LEAVE C,L0 | ||
Force termination of a DO-LOOP at the next opportunity by setting | Force termination of a DO-LOOP at the next opportunity by setting | ||
Строка 62: | Строка 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. | ||
== История == | |||
Реализация слова LEAVE в fig-Форте приравнивала счётчик цикла DO…LOOP к его границе, в результате чего последующее слово LOOP не выполняло переход на очередной цикл DO. 16-битный цикл DO…LOOP тех времён имел изъян. Он не позволял сделать просмотр адресов на границе 32Кб, например 32760 10 TYPE выдавало ошибку. Это вынудило провести реформу цикла DO…LOOP. | |||
В круговом цикле на 64K (описанном у Баранова-Ноздрунова) старая реализация LEAVE перестала работать и стандарт Форта-83 утвердил новый вариант LEAVE (немедленно прерывающий цикл), как стандартный. Этот новый вариант и реализован в [[Каллисто]], где роль цикла DO выполняет более современный цикл [[FOR]] … [[NEXT]], взятый из {{colorForth}}. | |||
== Реализация == | == Реализация == | ||
Слово LEAVE в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение: | Слово LEAVE в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение: | ||
<PRE> | <PRE> | ||
Строка 122: | Строка 81: | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|LEAVE|LEAVE}} | * {{Исходник|LEAVE|LEAVE}} | ||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1760 LEAVE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1760 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1760 LEAVE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1760 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http://forth-standard.org/standard/core/LEAVE LEAVE] и [http://forth-standard.org/standard/rationale#rat:core:LEAVE комментарий к нему] в черновике Forth 200x ''(англ.)'' | * Слово [http://forth-standard.org/standard/core/LEAVE LEAVE] и [http://forth-standard.org/standard/rationale#rat:core:LEAVE комментарий к нему] в черновике 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 Л.Броуди «Начальный курс программирования на языке Форт»] | * [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 Л.Броуди «Начальный курс программирования на языке Форт»] | ||
* См. также слово [[UNLOOP]] | |||
* [http://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | * [http://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | ||
Строка 134: | Строка 93: | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
[[Категория:Структуры управления Каллисто]] | [[Категория:Структуры управления Каллисто]] | ||