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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 8: Строка 8:
== Заметка ==
== Заметка ==
По количеству ключевых слов цикл с предусловием while() в языке Си самый «простой», а в [[Каллисто]] тот же цикл WHILE — самый «сложный». Целых три ключевых слова: [[BEGIN]] WHILE [[REPEAT]].
По количеству ключевых слов цикл с предусловием while() в языке Си самый «простой», а в [[Каллисто]] тот же цикл WHILE — самый «сложный». Целых три ключевых слова: [[BEGIN]] WHILE [[REPEAT]].
На самом деле число ключевых слов одинаково, т.к. в Си этот цикл чаще всего использует операторные скобки { }. И это если не считать (), в которых содержится проверка условия цикла.


== WHILE в стандарте ANS Forth ==
== WHILE в стандарте ANS Forth ==

Версия от 18:58, 16 июня 2016

WHILE (пока) — стандартное слово Каллисто. Проверка условия в цикле с предусловием.

WHILE          ( ф −− )                             Если ф ложен (ф=0), выйти из цикла BEGIN WHILE REPEAT.

Ветвление "WHILE" в цикле "BEGIN WHILE REPEAT".

Ввод слова WHILE

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

Заметка

По количеству ключевых слов цикл с предусловием while() в языке Си самый «простой», а в Каллисто тот же цикл WHILE — самый «сложный». Целых три ключевых слова: BEGIN WHILE REPEAT.

На самом деле число ключевых слов одинаково, т.к. в Си этот цикл чаще всего использует операторные скобки { }. И это если не считать (), в которых содержится проверка условия цикла.

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

Ссылка


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


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