Редактирование: WHILE

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''WHILE''' (пока) — стандартное слово [[Каллисто]]. Проверка предусловия в цикле «пока».
'''WHILE''' (пока) — стандартное слово [[Каллисто]]. Проверка условия в цикле «пока» с предусловием.
  WHILE          ( ф −− )                            Если ф ложен (ф=0), выйти из цикла BEGIN WHILE REPEAT.
  WHILE          ( ф −− )                            Если ф ложен (ф=0), выйти из цикла BEGIN WHILE REPEAT.
Ветвление "[[WHILE]]" в [[Цикл BEGIN-WHILE-REPEAT|цикле "BEGIN WHILE REPEAT"]] используется вместе со словами [[BEGIN]] и [[REPEAT]]:
Ветвление "[[WHILE]]" в [[Цикл BEGIN-WHILE-REPEAT|цикле "BEGIN WHILE REPEAT"]].
BEGIN условие WHILE тело-цикла REPEAT


== Ввод слова WHILE ==
== Ввод слова WHILE ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В↑|{{Серая клавиша|В↑}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В↑|{{Серая клавиша|В↑}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
== Детали реализации ==
По количеству ключевых слов цикл с предусловием while() в языке Си самый «простой», а в [[Каллисто]] тот же цикл WHILE — самый «сложный». Целых три ключевых слова: [[BEGIN]] WHILE [[REPEAT]].
На самом деле число ключевых слов одинаково, т.к. в Си этот цикл чаще всего использует операторные скобки { }. И это если не считать (), в которых содержится проверка условия цикла.
На этапе компиляции WHILE может вызывать [[Авост приложения|авост]].


== WHILE в стандарте ANS Forth ==
== WHILE в стандарте ANS Forth ==
Строка 28: Строка 34:


== История ==
== История ==
В некоторых сверхкомпактных Фортах вместо слова WHILE используется слово [[IF]], т.к. их реализации похожи.
В некоторых старых Фортах вместо слова WHILE использовалось слово [[IF]], т.к. их реализации похожи.


=== WHILE в предыдущем стандарте Forth-83 (англ.) ===
=== WHILE в предыдущем стандарте Forth-83 (англ.) ===
Строка 68: Строка 74:


== Реализация ==
== Реализация ==
По количеству ключевых слов цикл с предусловием while() в языке Си кажется «самым простым», а в [[Каллисто]] тот же цикл WHILE — «самый громоздкий». Целых три ключевых слова: [[BEGIN]] WHILE [[REPEAT]].
На самом деле число ключевых слов в [[Каллисто]] меньше, т.к. в Си этот цикл чаще всего использует операторные скобки { }. И это если не считать обязательных (), в которых заключена проверка условия цикла.
На этапе компиляции WHILE может вызывать [[Авост приложения|авост]], сгенерировав ошибку времени компиляции.
<pre>
3705 RIF:            .DW QCOMP, COMP,ZBRAND, GMARK, TWO, EXIT
3706
3707 ;#WHILE
3708 ; WHILE          I ( ф −− )                            Если ф ложен (ф=0), выйти из цикла BEGIN WHILE REPEAT.
3709 LWHILE:        .DB    85H
3710                .TEXT  "WHILE"                ; ( флаг −− )
3711                .DW    LIF                    ; Ветвление "WHILE" в цикле "BEGIN WHILE REPEAT".
3712 WHILE:          .DW CALL, ONE,QPAIR, ONE, BRAN,RIF
</pre>
Реализации из SP-Forth 4.20:
<pre>
: WHILE \ 94
\ Интерпретация: семантика неопределена.
\ Компиляция: ( C: dest -- orig dest )
\ Положить позицию новой неразрешенной ссылки вперед orig на управляющий стек
\ под имеющимся dest. Добавить семантику времени выполнения, данную ниже, к
\ текущему определению. Семантика незавершена, пока orig и dest не разрешатся
\ (например, по REPEAT).
\ Время выполнения: ( x -- )
\ Если все биты x нулевые, продолжать выполнение с позиции, заданной
\ разрешением orig.
  ?COMP [COMPILE] IF
  2SWAP
; IMMEDIATE
</pre>
<pre>
: WHILE \ 94
  ?COMP 0 TC-?BRANCH, >MARK 1
  2SWAP
; IMMEDIATE
</pre>
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова WHILE (стр. 65):
Юрий Семёнов приводит следующее определение слова WHILE (стр. 65):
   : WHILE  [COMPILE] IF ; IMMEDIATE
   : WHILE  [COMPILE] IF ; IMMEDIATE
Строка 150: Строка 117:
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/WHILE