Редактирование:
WHILE
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Реализация == По количеству ключевых слов цикл с предусловием while() в языке Си кажется «самым простым», а в [[Каллисто]] тот же цикл WHILE — «самый громоздкий». Целых три ключевых слова: [[BEGIN]] WHILE [[REPEAT]]. На самом деле число ключевых слов в [[Каллисто]] меньше, т.к. в Си этот цикл чаще всего использует операторные скобки { }. И это если не считать обязательных (), в которых заключена проверка условия цикла. На этапе компиляции WHILE может вызывать [[Авост приложения|авост]], сгенерировав ошибку времени компиляции. <pre> 3705 RIF: .DW QCOMP, COMP,ZBRAND, GMARK, TWO, EXIT 3706 3707 ;#WHILE 3708 ; WHILE I ( ф −− ) Если ф ложен (ф=0), выйти из цикла BEGIN WHILE REPEAT. 3709 LWHILE: .DB 85H 3710 .TEXT "WHILE" ; ( флаг −− ) 3711 .DW LIF ; Ветвление "WHILE" в цикле "BEGIN WHILE REPEAT". 3712 WHILE: .DW CALL, ONE,QPAIR, ONE, BRAN,RIF </pre> Реализации из SP-Forth 4.20: <pre> : WHILE \ 94 \ Интерпретация: семантика неопределена. \ Компиляция: ( C: dest -- orig dest ) \ Положить позицию новой неразрешенной ссылки вперед orig на управляющий стек \ под имеющимся dest. Добавить семантику времени выполнения, данную ниже, к \ текущему определению. Семантика незавершена, пока orig и dest не разрешатся \ (например, по REPEAT). \ Время выполнения: ( x -- ) \ Если все биты x нулевые, продолжать выполнение с позиции, заданной \ разрешением orig. ?COMP [COMPILE] IF 2SWAP ; IMMEDIATE </pre> <pre> : WHILE \ 94 ?COMP 0 TC-?BRANCH, >MARK 1 2SWAP ; IMMEDIATE </pre> === Советская реализация === Юрий Семёнов приводит следующее определение слова WHILE (стр. 65): : WHILE [COMPILE] IF ; IMMEDIATE У Баранова-Ноздрунова определение слова WHILE выглядит так (стр. 58): : WHILE ( A1,2 ---> A1,A2,3 ) 2 ?PAIRS COMPILE ?BRANCH >MARK 3 ; IMMEDIATE Описание слово WHILE и определение [[Цикл BEGIN-WHILE-REPEAT|цикла BEGIN…WHILE…REPEAT]] в ядре ФОРТ-ЕС: <PRE> Экран номер 47 WHILE HK 1->А,2 /КОМПИЛЯЦИЯ/ ВЕТВЛЕНИЕ "WHILE" В 47 F-> /ИСПОЛНЕНИЕ/ ЦИКЛЕ "BEGIN WHILE REPEAT" ( 31.03.86 СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ ) : BEGIN ?COMP <MARK 1 ; IMMEDIATE : WHILE 1 ?PAIRS 1 [COMPILE] IF ; IMMEDIATE : REPEAT >R >R [COMPILE] AGAIN R> R> [COMPILE] THEN ; IMMEDIATE </PRE> Определение слова WHILE в FORTH ИТЭФ: <PRE> HEAD 305Q,'WHIL',305Q,WHILE,$COL ; WHILE DW $IF,SEMI </PRE>
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице