Цикл BEGIN-UNTIL: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 8: Строка 8:
  BEGIN    \ заголовок цикла
  BEGIN    \ заголовок цикла
   xxx    \ тело цикла
   xxx    \ тело цикла
   f      \ условие цикла
   f      \ условие цикла:        -- flg
  UNTIL    \ проверка условия
  UNTIL    \ проверка условия: flg --


Отличительная особенность цикла «до» — проверка условия в конце тела цикла. Это означает, что цикл BEGIN…UNTIL всегда выполняется как минимум один раз.
Отличительная особенность цикла «до» — проверка условия в конце тела цикла. Это означает, что цикл BEGIN…UNTIL всегда выполняется как минимум один раз.
Строка 15: Строка 15:
Слово [[BEGIN]] является заголовком цикла. Последовательность слов xxx f между [[BEGIN]] и [[UNTIL]] является телом цикла и может исполняться больше одного раза. Тело цикла xxx f завершается последовательностью команд f — условием цикла, оставляющим на вершине [[Стек данных|стека]] флаг.
Слово [[BEGIN]] является заголовком цикла. Последовательность слов xxx f между [[BEGIN]] и [[UNTIL]] является телом цикла и может исполняться больше одного раза. Тело цикла xxx f завершается последовательностью команд f — условием цикла, оставляющим на вершине [[Стек данных|стека]] флаг.


Слово [[UNTIL]] снимает этот флаг со [[Стек данных|стека]] и осуществляет проверку условия цикла. Если этот флаг ложь, то есть равен нулю (условие не выполняется), цикл повторяется. Как только условие начинает выполняться (флаг истина, отличен от нуля), цикл прерывается.
Слово [[UNTIL]] снимает этот флаг со [[Стек данных|стека]] и осуществляет проверку условия цикла. Если этот флаг ложь, то есть равен нулю (условие не выполнено), цикл повторяется. Как только условие начинает выполняться (флаг истина, отличен от нуля), цикл прерывается.


Если условие выполняется сразу, тело цикла будет выполнено ровно один раз.
Если условие выполняется сразу, тело цикла будет выполнено ровно один раз.

Версия от 13:21, 12 сентября 2015

Цикл BEGIN xxx f UNTIL всегда выполняется хотя бы 1 раз.
Картинка из книги Лео Броди «Starting FORTH»

Цикл «до» BEGIN…UNTIL в Каллисто имеет следующий вид (xxx и f это последовательности слов Каллисто):

BEGIN xxx f UNTIL

Подробней:

BEGIN     \ заголовок цикла
  xxx     \ тело цикла
  f       \ условие цикла:        -- flg
UNTIL     \ проверка условия: flg --

Отличительная особенность цикла «до» — проверка условия в конце тела цикла. Это означает, что цикл BEGIN…UNTIL всегда выполняется как минимум один раз.

Слово BEGIN является заголовком цикла. Последовательность слов xxx f между BEGIN и UNTIL является телом цикла и может исполняться больше одного раза. Тело цикла xxx f завершается последовательностью команд f — условием цикла, оставляющим на вершине стека флаг.

Слово UNTIL снимает этот флаг со стека и осуществляет проверку условия цикла. Если этот флаг ложь, то есть равен нулю (условие не выполнено), цикл повторяется. Как только условие начинает выполняться (флаг истина, отличен от нуля), цикл прерывается.

Если условие выполняется сразу, тело цикла будет выполнено ровно один раз.


Заметка

Выделять на отдельной строчке условие f в теле цикла xxx f это хорошая, но необязательная практика программирования. Флаг всегда проверяется в конце цикла, но может формироваться и в начале, и в середине цикла. Главное, чтобы после выполнения тела цикла этот флаг остался на вершине стеке. Только тогда этот флаг и проверит условный оператор ?BRANCH, в который компилируется слово UNTIL.

Циклы на Каллисто возможны лишь внутри определений через двоеточие. Перед тем, как на него передадут управление, цикл должен правильно скомпилироваться. Во время компиляции происходит проверка ошибок, чтобы каждому UNTIL соответствовал свой BEGIN.


Ссылка