Слово I
I (счётчик цикла, читается «ай») — стандартное слово Каллисто. Переменная цикла FOR.
I ( −− U ) Дать текущее значение счётчика цикла FOR.
Копирует текущее значение счётчика цикла в стек данных. Предназначено для использования внутри цикла FOR…NEXT. Заметим, что переменная цикла ведёт обратный отсчёт от количества циклов до единицы и всегда положительна.
Ввод слова I[править]
В режиме ЛАТ нажмите белую клавишу 7
I в стандарте ANS Forth[править]
6.1.1680 I CORE Интерпретация: Семантика интерпретации для этого слова не определена. Выполнение: ( -- n|u ) ( R: loop-sys -- loop-sys ) n|u - копия текущего (самого внутреннего) индекса цикла. Неопределенная ситуация существует, если параметры управления циклом недоступны.
История[править]
Название связано с использованием внутри циклов FOR .. NEXT — в них I копирует в стек значение индекса цикла.
В большинстве Фортов слова I и R@ являются синонимами. В Каллисто это так, лишь пока вы оперируете целыми числами от 0 до 32767.
I в предыдущем стандарте Forth-83 (англ.)[править]
I -- w C,79 w is a copy of the loop index. May only be used in the form: DO ... I ... LOOP or DO ... I ... +LOOP
I в стандарте Forth-79 (англ.)[править]
I -- n C,136 Copy the loop index onto the data stack. May only be used in the form: DO ... I ... LOOP or DO ... I ... +LOOP
I в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
I --- n C,L0 Used within a DO-LOOP to copy the loop index to the stack. Other use is implementation dependent. See R.
Реализация[править]
В Каллисто 1.0 слово I похоже на слово R@, но достаёт с вершины стека возвратов беззнаковое целое и поэтому немного быстрее:
1828 ;#I 1829 ; I ( −− U ) Значение счётчика цикла FOR. 1830 LI: .DB 1 1831 .TEXT "I" ; ( −− n ) 1832 .DW LRAT 1833 I: .DW JI ; Скопировать верхнее 16−битное число из стека возвратов в стек данных. 1834 JI: RM2 1835 I0: MA M5 1836 KRMA RME ∗ KRM5 + KM3 KGOTO9
Реализации из SP-Forth 4.20:
CODE C-I LEA EBP, -4 [EBP] MOV [EBP], EAX MOV EAX, [ESP] SUB EAX, 4 [ESP] RET END-CODE … : I \ 94 \ Интерпретация: семантика неопределена. \ Выполнение: ( -- n|u ) ( R: loop-sys -- loop-sys ) \ n|u - копия текущего (внутреннего) индекса цикла. Неопределенная ситуация \ возникает, если парметры цикла недоступны. ?COMP ['] C-I INLINE, ; IMMEDIATE
: I \ 94 ?COMP S" C-I" TC-FINDOUT INLINE, ; IMMEDIATE
Советская реализация[править]
Слово I в ФОРТ-ЕС и FORTH ИТЭФ было примитивом. Вот его описание и определение в ФОРТ-ЕС:
I К ->W ТЕКУЩЕЕ ЗНАЧЕНИЕ W СЧЕТЧИКА ЦИКЛА "ПО" 24 Экран номер 24 ( 09.09.86 ЦИКЛЫ СО СЧЕТЧИКОМ: (DO/ I I' J LEAVE) CODE I ( ->U ТЕКУЩЕЕ 3HАЧЕHИE СЧЕТЧИКА ЦИКЛА) RW1 RPULL, PUSHRW1 B, END-CODE
Вот его определение в FORTH ИТЭФ:
HEAD 201Q,,311Q,I ; I RR$: PUSH [BP] Z$: NEXT
Ссылки[править]
- Исходный текст слова I в Каллисто Классик 1.0
- См. слова R@, FOR, NEXT, UNLOOP, LEAVE, J и K
- Слово I в стандарте ANS Forth (англ.)
- Слово I в черновике Forth 200x (англ.)
- Счётчик цикла в Википедии
- ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- The Philosophy of Fixed Point в книге Leo Brodie Starting Forth (англ.)
- Throw It For a Loop в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |