WHILE: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) (→Ссылка) |
||
Строка 101: | Строка 101: | ||
== Ссылка == | == Ссылка == | ||
* {{Исходник|WHILE|WHILE}} | * {{Исходник|WHILE|WHILE}} | ||
* См. слова [[BEGIN]] и [[REPEAT]] | |||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2430 WHILE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2430 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2430 WHILE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2430 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http://forth-standard.org/standard/core/WHILE WHILE] и [http://forth-standard.org/standard/rationale#rat:core:WHILE комментарий к нему] в черновике Forth 200x ''(англ.)'' | * Слово [http://forth-standard.org/standard/core/WHILE WHILE] и [http://forth-standard.org/standard/rationale#rat:core:WHILE комментарий к нему] в черновике Forth 200x ''(англ.)'' |
Версия от 11:08, 21 июня 2016
WHILE (пока) — стандартное слово Каллисто. Проверка условия в цикле с предусловием.
WHILE ( ф −− ) Если ф ложен (ф=0), выйти из цикла BEGIN WHILE REPEAT.
Ветвление "WHILE" в цикле "BEGIN WHILE REPEAT".
Ввод слова WHILE
В режиме ЛАТ последовательно нажмите клавиши В↑ ПП 7 − ИП
Детали реализации
По количеству ключевых слов цикл с предусловием while() в языке Си самый «простой», а в Каллисто тот же цикл WHILE — самый «сложный». Целых три ключевых слова: BEGIN WHILE REPEAT.
На самом деле число ключевых слов одинаково, т.к. в Си этот цикл чаще всего использует операторные скобки { }. И это если не считать (), в которых содержится проверка условия цикла.
На этапе компиляции WHILE может вызывать авост.
WHILE в стандарте ANS Forth
6.1.2430 WHILE CORE Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: ( C: dest -- orig dest ) Помещает адрес ячейки новой неразрешенной ссылки вперед orig на стек потока управления, под существующим dest. Добавляет семантику времени-выполнения, данную ниже к текущему определению. Семантика не завершена до разрешения orig и dest (например, REPEAT). Время-выполнения: ( x -- ) Если все биты x нулевые, продолжает выполнение с адреса ячейки определенного ссылкой orig. A.6.1.2430 WHILE Типичное использование: : X ... BEGIN ... test WHILE ... REPEAT ... ;
История
В некоторых старых Фортах вместо слова WHILE использовалось слово IF, т.к. их реализации похожи.
WHILE в предыдущем стандарте Forth-83 (англ.)
WHILE flag -- C,I,79 sys1 -- sys2 (compiling) Used in the form: BEGIN ... flag WHILE ... REPEAT Selects conditional execution based on flag. When flag is true, execution continues to just after the WHILE through to the REPEAT which then continues execution back to just after the BEGIN . When flag is false, execution continues to just after the REPEAT , exiting the control structure. sys1 is balanced with its corresponding BEGIN . sys2 is balanced with its corresponding REPEAT . See: BEGIN
WHILE в стандарте Forth-79 (англ.)
WHILE flag -- I,C,149 Used in the form: BEGIN ... flag WHILE ... REPEAT Select conditional execution based on flag. On a true flag, continue execution through to REPEAT, which then returns back to just after BEGIN. On a false flag, skip execution to just after REPEAT, exiting the structure.
WHILE в fig-FORTH Release 1 glossary, май 1979 (англ.)
WHILE f --- (run-time) ad1 nl --- ad1 n1 ad2 n2 p,C2 Occurs in a colon-definition in the form: BEGIN ... WHILE (tp) ... REPEAT At run-time, WHILE selects conditional execution based on boolean flag f. If f is true (non-zero), WHILE continues execution of the true part thru to REPEAT, which then branches back to BEGIN. If f is false (zero), execution skips to just after REPEAT, exiting the structure. At compile time, WHILE emplaces (0BRANCH) and leaves ad2 of the reserved offset. The stack values will be resolved by REPEAT.
Реализация
Юрий Семёнов приводит следующее определение слова WHILE (стр. 65):
: WHILE [COMPILE] IF ; IMMEDIATE
У Баранова-Ноздрунова определение слова WHILE выглядит так (стр. 58):
: WHILE ( A1,2 ---> A1,A2,3 ) 2 ?PAIRS COMPILE ?BRANCH >MARK 3 ; IMMEDIATE
Описание слово WHILE и определение цикла BEGIN…WHILE…REPEAT в ядре ФОРТ-ЕС:
Экран номер 47 WHILE HK 1->А,2 /КОМПИЛЯЦИЯ/ ВЕТВЛЕНИЕ "WHILE" В 47 F-> /ИСПОЛНЕНИЕ/ ЦИКЛЕ "BEGIN WHILE REPEAT" ( 31.03.86 СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ ) : BEGIN ?COMP <MARK 1 ; IMMEDIATE : WHILE 1 ?PAIRS 1 [COMPILE] IF ; IMMEDIATE : REPEAT >R >R [COMPILE] AGAIN R> R> [COMPILE] THEN ; IMMEDIATE
Определение слова WHILE в FORTH ИТЭФ:
HEAD 305Q,'WHIL',305Q,WHILE,$COL ; WHILE DW $IF,SEMI
Ссылка
- Исходный текст слова WHILE в Каллисто Классик 1.0
- См. слова BEGIN и REPEAT
- Слово WHILE и комментарий к нему в стандарте ANS Forth (англ.)
- Слово WHILE и комментарий к нему в черновике Forth 200x (англ.)
- While loop в английской Википедии (англ.)
- ЦИКЛИЧЕСКИЕ СТРУКТУРЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Throw It For a Loop в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |