Слово ↑
↑ (дублировать, читается «стрелка вверх») — адаптированное слово Каллисто. Продублировать верхний элемент стека.
↑ ( x -- x x ) Дублировать.
Дублирует вершину стека, добавляя в стек ещё одно значение, равное тому, которое было до этого верхним.
Ввод слова ↑
В режиме NUM нажмите белую клавишу В↑
DUP и FDUP в стандарте ANS Forth
6.1.1290 DUP "dupe" CORE ( x -- x x ) Дублирует x. 12.6.1.1510 FDUP "f-dupe" FLOATING ( F: r -- r r ) or ( r -- r r ) Дублирует r.
История
В Форте слово ↑ одно из самых древних и устоявшихся, но называется DUP, от английского duplicate — дублировать.
Впервые DUP появился в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году (Национальная ускорительная лаборатория SLAC, Стэнфордский университет).
В 1970 году DUP был реализован Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500 и в таком виде вошло во все стандарты Форта.
Более удобное короткое название ↑ досталось в наследство от советского ПМК «Электроника Б3-34», выпущенного в 1980 году. В Каллисто название DUP осталось в именах слов ?DUP и 2DUP.
В Форте FSP88M слово ↑ известно под именем DU
DUP в предыдущем стандарте Forth-83 (англ.)
DUP 16b -- 16b 16b 79 "dupe" Duplicate 16b.
DUP в стандарте Forth-79 (англ.)
DUP n -- n n 205 "dupe" Leave a copy of the top stack number.
DUP в fig-FORTH Release 1 glossary, май 1979 (англ.)
DUP n --- n n L0 Duplicate the value on the stack.
Реализация
В Каллисто 1.0 слово ↑ является аналогом команды ЭКВМ В↑, но действует в стеке данных Каллисто:
1903 ;#DUP 1904 ; ↑ ( x −− x x ) Дублировать. 1905 LDUP: .DB 1,24 1906 .DW LDSWAP 1907 DUP: .DW JDUP 1908 JDUP: PKRM03 KM3 KGOTO9 ; Дублировать верхний элемент стека.
В Каллисто слово ↑ реализовано, как примитив. Но при необходимости ↑ можно легко выразить через более мощное слово PICK:
: ↑ ( x -- x x) 0 PICK ;
Это определение верно и в Форте, начиная с Форта-83.
Реализации в SP-Forth 4.20
0 VALUE 'DUP_V … : 'DUP 'DUP_V ; … : 'DUP S" DUP" TC-FINDOUT TC-LIT, ; IMMEDIATE
' DUP >VIRT CONSTANT 'DUP
\ ================================================================ \ Стековые манипуляции CODE DUP ( x -- x x ) \ 94 \ Продублировать x. LEA EBP, -4 [EBP] MOV [EBP], EAX RET END-CODE
CODE FDUP \ * FLD ST(0) RET END-CODE
Советская реализация
Слово ↑ в ФОРТ-ЕС называлось DUP и было примитивом. Вот его описание и определение:
DUP W->W,W ПРОДУБЛИРОВАТЬ ВЕРХНЕЕ ЗНАЧЕНИЕ 9 Экран номер 9 ( 31.03.86 DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT ) CODE DUP ( W->W,W) RW1 PULL, PUSHRW1 B, END-CODE
В FORTH ИТЭФ слово ↑ называлось DUP и также было примитивом, вот его определение:
HEAD 203Q,'DU',320Q,DUBL ; DUP POP AX DU: PUSH AX C$: PUSH AX NEXT
Ссылки
- Исходный текст слова ↑ в Каллисто Классик 1.0
- См. слова 2DUP, ?DUP, ↔, DROP, OVER, ROT
- Слова DUP (dupe) и FDUP (f-dupe) в стандарте ANS Forth (англ.)
- Слова DUP (dupe) и FDUP (f-dupe) в черновике Forth 200x (англ.)
- ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- How to Get Results в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |