Редактирование: Цикл BEGIN-UNTIL
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
[[Файл:indefinite.gif|thumb|right|491px|Цикл BEGIN xxx f UNTIL всегда выполняется хотя бы 1 раз.<br>Картинка из книги Лео Броди «Starting FORTH»]] | [[Файл:indefinite.gif|thumb|right|491px|Цикл BEGIN xxx f UNTIL всегда выполняется хотя бы 1 раз.<br>Картинка из книги Лео Броди «Starting FORTH»]] | ||
'''Цикл «до»''' BEGIN…UNTIL в [[Каллисто]] имеет следующий вид (xxx и f это последовательности слов Каллисто): | |||
BEGIN xxx f UNTIL | BEGIN xxx f UNTIL | ||
Строка 8: | Строка 8: | ||
BEGIN \ заголовок цикла | BEGIN \ заголовок цикла | ||
xxx \ тело цикла | xxx \ тело цикла | ||
f \ условие | f \ условие цикла | ||
UNTIL \ проверка условия | UNTIL \ проверка условия | ||
Отличительная особенность цикла «до» — проверка условия в конце тела цикла. Это означает, что цикл BEGIN…UNTIL всегда выполняется как минимум один раз. | Отличительная особенность цикла «до» — проверка условия в конце тела цикла. Это означает, что цикл BEGIN…UNTIL всегда выполняется как минимум один раз. | ||
Слово [[BEGIN]] является заголовком цикла. Последовательность слов xxx f между [[BEGIN]] и [[UNTIL]] является телом цикла и может исполняться больше одного раза. Тело цикла xxx f завершается последовательностью команд f — условием цикла, оставляющим на вершине [[Стек данных|стека]] флаг | Слово [[BEGIN]] является заголовком цикла. Последовательность слов xxx f между [[BEGIN]] и [[UNTIL]] является телом цикла и может исполняться больше одного раза. Тело цикла xxx f завершается последовательностью команд f — условием цикла, оставляющим на вершине [[Стек данных|стека]] флаг. | ||
Слово [[UNTIL]] снимает этот флаг со [[Стек данных|стека]] и осуществляет проверку условия цикла. Если этот флаг ложь, то есть | Слово [[UNTIL]] снимает этот флаг со [[Стек данных|стека]] и осуществляет проверку условия цикла. Если этот флаг ложь, то есть равен нулю (условие не выполняется), цикл повторяется. Как только условие начинает выполняться (флаг истина, отличен от нуля), цикл прерывается. | ||
Если условие выполняется сразу, тело цикла будет выполнено ровно один раз. | Если условие выполняется сразу, тело цикла будет выполнено ровно один раз. | ||
Строка 21: | Строка 21: | ||
== Заметка == | == Заметка == | ||
Выделять на отдельной строчке условие f в теле цикла xxx f это хорошая, но необязательная практика программирования. Флаг | Выделять на отдельной строчке условие f в теле цикла xxx f это хорошая, но необязательная практика программирования. Флаг всегда проверяется в конце цикла, но может формироваться и в начале, и в середине цикла. Главное, чтобы после выполнения тела цикла этот флаг остался на вершине стеке. Только тогда этот флаг и проверит условный оператор [[?BRANCH]], в который компилируется слово [[UNTIL]]. | ||
Циклы на [[Каллисто]] возможны лишь внутри определений через двоеточие. Перед тем, как на него передадут управление, цикл должен правильно скомпилироваться. Во время компиляции происходит проверка ошибок, чтобы каждому [[UNTIL]] соответствовал свой [[BEGIN]]. | |||
== Ссылка == | == Ссылка == | ||
* [https://en.wikipedia.org/wiki/Do_while_loop Do while loop в английской Википедии] ''(англ.)'' | * [https://en.wikipedia.org/wiki/Do_while_loop Do while loop в английской Википедии] ''(англ.)'' | ||
[[Категория:Каллисто]] | [[Категория:Каллисто]] |