ROT
ROT (вращать, читается «роут») — стандартное слово Каллисто. Перенести третий сверху элемент стека наверх стека.
ROT ( z y x -- y x z ) Перенести наверх третье сверху.
Циклически переставляет три верхних элемента стека, перенося самый нижний из них наверх стека.
Ввод слова ROT[править]
В режиме ЛАТ последовательно нажмите три белые клавиши × 5 2
ROT и FROT в стандарте ANS Forth[править]
6.1.2160 ROT "rote" CORE ( x1 x2 x3 -- x2 x3 x1 ) Вращает три верхних элемента стека. 12.6.1.1610 FROT "f-rote" FLOATING ( F: r1 r2 r3 -- r2 r3 r1 ) or ( r1 r2 r3 -- r2 r3 r1 ) Вращает три верхних элемента стека с плавающей точкой.
Заметки[править]
Слово, обратное ROT, называется −ROT . Его нет в ядре Каллисто, но −ROT легко выразить через ROT:
: -ROT ( z y x -- x z y) ROT ROT ;
История[править]
В Форте слово ROT одно из самых древних и устоявшихся. Название слова ROT происходит от английского rotate — вращать.
Произношение «роут» взято из второй главы книги Лео Броуди «Starting Forth». Лео настаивает на том, чтобы английская буква "o" произносилась так, как в английском алфавите (открытом слове). Также это помогает отличать каллистянское слово ROT от русского слова «рот» (уста, зев, пасть).
В документации ФОРТ-ЕС подобное кольцевое передвижение элементов стека, когда самый нижний элемент «всплывает» наверх, названо «по часовой стрелке». Эта шутка противоречит рисунку на клавиатуре ПМК, где команда F⟳ «топит» верхний элемент (регистр X) 4-х уровненного стека на его дно (регистр T), дублируя действия DROP.
ROT в предыдущем стандарте Forth-83 (англ.)[править]
ROT 16b1 16b2 16b3 -- 16b2 16b3 16b1 79 "rote" The top three stack entries are rotated, bringing the deepest to the top.
ROT в стандарте Forth-79 (англ.)[править]
ROT n1 n2 n3 -- n2 n3 n1 212 "rote" Rotate the top three values, bringing the deepest to the top.
ROT в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
ROT n1 n2 n3 --- n2 n3 n1 L0 Rotate the top three values on the stack, bringing the third to the top.
Реализация[править]
1926 ;#ROT 1927 ; ROT ( z y x −− y x z ) Вращать. Перенести наверх третий сверху. 1928 LROT: .DB 3 1929 .TEXT "ROT" ; ( a b c −− b c a ) 1930 .DW LDUP2 1931 ROT: .DW JROT ; Перенести 3−й элемент стека наверх. ("Вращение трёх верхних элементов по часовой стрелке.") 1932 JROT: RM3 M8 M5 1933 KRM5 KRM8 PKM05 <−> 1934 KRM5 KM8 <−> 1935 PKM05 1936 KGOTO9 1937 ; x1 x2 x3 −− a b c = x2 x3 x1 1938 ; 1939 ; T | 1940 ; Z | x3 x3 x3 x3 1941 ; Y | x2 x2 x3 x2 x2 x1 x1 1942 ; X | x2 x3 b:=x3 x2 x1 c:=x1 x2 a:=x2 1943 ; −−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 1944 ; KRM5 KRM8 PKM05 <−> KRM5 KM8 <−> PKM05
Следующий вариант реализации использует на один регистр и одну команду меньше, зато длиннее на один шаг. Если он окажется быстрее, реализацию ROT можно заменить на следующую:
CODE ROT ( z y x -- y x z ) ИП3 П5 КИП5 РКИП03 РКП05 ↔ КИП5 РКП03 ↔ РКП05 КБП9 END-CODE
Реализации из SP-Forth 4.20:
CODE ROT ( x1 x2 x3 -- x2 x3 x1 ) \ 94 \ Прокрутить три верхних элемента стека. MOV EDX, [EBP] MOV [EBP], EAX MOV EAX, 4 [EBP] MOV 4 [EBP], EDX RET END-CODE
CODE FROT \ * FXCH ST(2) FXCH ST(1) FXCH ST(2) FXCH ST(1) RET END-CODE
Советская реализация[править]
Определение слова ROT в ядре ФОРТ-ЕС использует стек возвратов:
ROT W1,W2,W3->W2,W3,W1 ПЕРЕСТАВИТЬ ТРИ 9 ВЕРХНИХ ЗНАЧЕНИЯ ПО ЧАСОВОЙ СТРЕЛКЕ Экран номер 9 ( 31.03.86 DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT ) : ROT ( N1,N2,N3->N2,N3,N1 ) >R SWAP R> SWAP ;
В FORTH ИТЭФ слово ROT было примитивом, вот его определение:
HEAD 203Q,'RO',324Q,ROT ; ROT POP AX POP CX POP BX PUSH CX PUSH AX PUSH BX NEXT
Ссылки[править]
- Исходный текст слова ROT в Каллисто Классик 1.0
- См. слова ↑, ↔, DROP, OVER
- Слова ROT (rote) и FROT (f-rote) в стандарте ANS Forth (англ.)
- Слова ROT (rote) и FROT (f-rote) в черновике Forth 200x (англ.)
- ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- How to Get Results в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |