Редактирование:
Цикл BEGIN-WHILE-REPEAT
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
[[Файл:repeat.gif|thumb|right|433px|Цикл BEGIN xxx f WHILE yyy REPEAT.<br>Картинка из книги Лео Броди «Starting FORTH»]] Каллистянский '''цикл «пока» с предусловием''' (BEGIN…WHILE…REPEAT) имеет следующий вид: BEGIN f WHILE yyy REPEAT Характерная черта цикла с предусловием — проверка условия f в начале цикла. Если условие f не выполнено ([[FALSE|ложно]], flg = 0), тело цикла yyy может вообще ни разу не выполниться. Слово [[BEGIN]] является заголовком цикла. Последовательность слов f между [[BEGIN]] и [[WHILE]] (условие цикла) оставляет флаг flg на вершине [[Стек данных|стека]]. Слово [[WHILE]] проверяет условие цикла, считывая этот флаг. Пока флаг истинен, то есть flg ≠ 0 (условие выполняется), исполняется тело цикла yyy, расположенное между словами [[WHILE]] и [[REPEAT]], после чего условие f проверяется ещё раз. Если флаг [[FALSE|ложен]] (flg = 0, условие нарушено) происходит выход из цикла. Управление передаётся на слово, находящееся после [[REPEAT]]. == Это интересно == Последовательность слов между [[BEGIN]] и [[WHILE]] исполняется как минимум один раз и может содержать другие слова xxx, отличные от условия цикла f: BEGIN \ заголовок цикла xxx \ исполняется перед вычислением условия f \ условие продолжения цикла: -- flg WHILE \ проверка условия: flg -- yyy \ тело цикла REPEAT \ конец цикла В этом случае xxx f будет исполняться, пока исполнение f не выдаст «ложь» (flg = 0), образуя аналог [[Цикл BEGIN-UNTIL|цикла «до»]] — но с инвертированным условием окончания цикла («ложь» его разрывает) и последовательностью команд yyy, исполняемой между проверками (и не исполняемой ни разу, если xxx f сразу выдаст «ложь»). Слово [[REPEAT]] завершает описание цикла. Оно всегда передаёт управление на соответствующий [[BEGIN]] и компилируется в оператор безусловного перехода [[BRANCH]]. Слово [[WHILE]] компилируется в условный переход [[?BRANCH]] на адрес, следующий за словом [[REPEAT]]. Циклы на [[Каллисто]] возможны лишь внутри определений через двоеточие. Перед тем, как на него передадут управление, цикл должен правильно скомпилироваться. Во время компиляции происходит проверка ошибок с помощью слова [[?PAIRS]], чтобы каждому [[WHILE]] соответствовал свой [[REPEAT]], а каждому [[REPEAT]] соответствовал свой [[BEGIN]]. == Ссылка == * [https://en.wikipedia.org/wiki/While_loop 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://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' [[Категория:Каллисто]]
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице