Редактирование: Цикл BEGIN-UNTIL
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 13: | Строка 13: | ||
Отличительная особенность цикла «до» — проверка условия в конце тела цикла. Это означает, что цикл 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]]. | ||
Циклы на [[Каллисто]] возможны лишь внутри определений через двоеточие. Перед тем, как на него передадут управление, цикл должен правильно скомпилироваться. Во время компиляции происходит проверка ошибок с помощью слова [[?PAIR]], чтобы каждому [[UNTIL]] соответствовал свой [[BEGIN]]. | Циклы на [[Каллисто]] возможны лишь внутри определений через двоеточие. Перед тем, как на него передадут управление, цикл должен правильно скомпилироваться. Во время компиляции происходит проверка ошибок с помощью слова [[?PAIR]], чтобы каждому [[UNTIL]] соответствовал свой [[BEGIN]]. |