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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 28: Строка 28:
* [https://en.wikipedia.org/wiki/Do_while_loop Do while loop в английской Википедии] ''(англ.)''
* [https://en.wikipedia.org/wiki/Do_while_loop Do while loop в английской Википедии] ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\06.ZIKLITESKIE%20STRUKTURY ЦИКЛИЧЕСКИЕ СТРУКТУРЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\06.ZIKLITESKIE%20STRUKTURY ЦИКЛИЧЕСКИЕ СТРУКТУРЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




[[Категория:Каллисто]]
[[Категория:Каллисто]]

Версия от 05:48, 25 марта 2016

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

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

BEGIN xxx f UNTIL

Подробней:

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

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

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

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

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


Заметка

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

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

Ссылка