AGAIN
Перейти к навигации
Перейти к поиску
AGAIN — стандартное слово Каллисто.
AGAIN ( −− ) Перейти к началу бесконечого цикла BEGIN AGAIN.
Конец безусловного цикла "BEGIN AGAIN".
Ввод слова AGAIN
В режиме ЛАТ последовательно нажмите клавиши ШГ← БП ШГ← 7 4
AGAIN в стандарте ANS Forth
6.2.0700 AGAIN CORE EXT Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: ( C: dest -- ) Добавляет семантику времени-выполнения, данную ниже к текущему определению, разрешением ссылки назад dest. Время-выполнения: ( -- ) Продолжает выполнение с адреса ячейки определенного dest. Если никакое другое слово потока управления не используется, любой код программы после AGAIN не будет выполнен. См.: 6.1.0760 BEGIN. A.6.2.0700 AGAIN Типичное использование: : X ... BEGIN ... AGAIN ... ; Если последовательность слов не имеет способ закончиться, это бесконечный цикл.
История
Слово AGAIN является одним из самых древних и вошло во все стандарты Форта.
Цикл BEGIN…AGAIN появился в 1966 году под именем START ... REPEAT, когда Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI).
AGAIN в предыдущем стандарте Forth-83 (англ.)
AGAIN -- C,I sys -- (compiling) Effect an unconditional jump back to the start of a BEGIN- AGAIN loop. sys is balanced with its corresponding BEGIN . See: BEGIN
AGAIN в стандарте Forth-79 (англ.)
AGAIN I,C,114 Effect an unconditional jump back to the start of a BEGIN- AGAIN loop.
AGAIN в fig-FORTH Release 1 glossary, май 1979 (англ.)
AGAIN addr n --- (compiling) P,C2,L0 Used in a colon-definition in the form: BEGIN ... AGAIN At run-time, AGAIN forces execution to return to corresponding BEGIN. There is no effect on the stack. Execution cannot leave this loop (unless R> DROP is executed one level below). At compile time, AGAIN compiles BRANCH with an offset from HERE to addr. n is used for compile-time error checking.
Реализация
На этапе компиляции AGAIN может вызывать авост.
3659 RLRESOLVE: .DW LITP 3660 .DB 39,17 ; 10001 3661 .DW SUB, BRAN,RCOMMA … 3670 ;#AGAIN 3671 ; AGAIN I ( −− ) Перейти к началу бесконечого цикла BEGIN AGAIN. 3672 LAGAIN: .DB 85H 3673 .TEXT "AGAIN" 3674 .DW LUNTIL ; Конец бесконечного цикла "BEGIN AGAIN". 3675 AGAIN: .DW CALL, ONE,QPAIR, COMP,BRAND, BRAN,RLRESOLVE
Реализации из SP-Forth 4.20:
: AGAIN \ 94 CORE EXT \ Интерпретация: семантика неопределена. \ Компиляция: ( C: dest -- ) \ Добавить семантику времени выполнения, данную ниже, к текущему определению, \ разрешив ссылку назад dest. \ Время выполнения: ( -- ) \ Продолжить выполнение с позиции, заданной dest. Если другие управляющие слова \ не используются, то любой программный код после AGAIN не будет выполняться. ?COMP 3 <> IF -2006 THROW THEN \ ABORT" AGAIN без BEGIN !" DUP DP @ 2+ - DUP SHORT? IF SetJP 0xEB C, C, DROP ELSE DROP BRANCH, THEN DP @ TO :-SET ; IMMEDIATE
: AGAIN POSTPONE AGAIN DP @ TO :-SET ; IMMEDIATE
Советская реализация
Описание слова AGAIN и определение цикла BEGIN…AGAIN в ядре ФОРТ-ЕС:
AGAIN +НК А,1-> /КОМПИЛЯЦИЯ/ КОНЕЦ ЦИКЛА "BEGIN AGAIN" 47 -> /ИСПОЛНЕНИЕ/ Экран номер 47 ( 31.03.86 СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ ) : BEGIN ?COMP <MARK 1 ; IMMEDIATE : AGAIN 1 ?PAIRS COMPILE BRANCH <RESOLVE ; IMMEDIATE
Ссылки
- Исходный текст слова AGAIN в Каллисто Классик 1.0
- См. слово BEGIN
- См. также слова WHILE и REPEAT
- Слово AGAIN и комментарий к нему в стандарте ANS Forth(англ.)
- Слово AGAIN и комментарий к нему в черновике Forth 200x (англ.)
- Бесконечный цикл на Википедии
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |