?DUP: различия между версиями
AtH (обсуждение | вклад) (→Ссылки) |
AtH (обсуждение | вклад) |
||
Строка 52: | Строка 52: | ||
: ?DUP ( W->W,W| 0->0 ) DUP IF DUP THEN ; | : ?DUP ( W->W,W| 0->0 ) DUP IF DUP THEN ; | ||
</PRE> | </PRE> | ||
В FORTH ИТЭФ слово ?DUP называлось −DUP и | В FORTH ИТЭФ слово ?DUP называлось −DUP и было [[примитив]]ом, который опирался на код [[примитив]]а [[Слово ↑|DUP]], вот их определения: | ||
<PRE> | <PRE> | ||
HEAD 203Q,'DU',320Q,DUBL ; DUP | HEAD 203Q,'DU',320Q,DUBL ; DUP |
Версия от 21:26, 27 марта 2016
?DUP (вопрос-дублировать, читается «вопрос-дуп») — стандартное слово Каллисто. Осуществляет операцию ↑ если x≠0.
?DUP ( x -- 0 | x x )
Дублирует верхнее значение, если это не ноль, и оставляет стек в исходном состоянии, если на вершине ноль.
Ввод слова ?DUP
В режиме NUM последовательно нажмите клавиши K Р-ГРД-Г K 3 6
Для возврата в режим NUM нажмите синюю клавишу P .
Детали реализации
Слово ?DUP часто используется перед IF.
?DUP в стандарте ANS Forth
6.1.0630 ?DUP "question-dupe" CORE ( x -- 0 | x x ) Дублирует x, если оно ненулевое.
?DUP в предыдущем стандарте Forth-83 (англ.)
?DUP 16b -- 16b 16b 79 "question-dupe" or 0 -- 0 Duplicate 16b if it is non-zero.
?DUP в стандарте Forth-79 (англ.)
?DUP n -- n ( n ) 184 "query-dupe" Duplicate n if it is non-zero.
−DUP в fig-FORTH Release 1 glossary, май 1979 (англ.)
-DUP n1 -- n1 (if zero) n1 -- n1 n1 (non-zero) L0 Reproduce n1 only if it is non-zero. This is usually used to copy a value just before IF, to eliminate the need for an ELSE part to drop it.
История
При переносе на Каллисто старых программ, написанных для fig-Форта, нужно заменять старое наименование −DUP на новое ?DUP
В Форте FSP88M это слово известно под именем ?DU (три литеры).
Слово ?DUP подвергается критике, т.к. оставляет на стеке разное количество элементов, что является плохим стилем программирования. В colorForth слово ?DUP нет, т.к. IF там неразрушающий.
Реализация
У Баранова-Ноздрунова приводится следующее определение слова ?DUP (стр. 29):
: ?DUP ( A ---> A,A / 0 ) ↑ IF ↑ THEN ;
Описание и определение слова ?DUP в ядре ФОРТ-ЕС:
?DUP W->W,W ПРОДУБЛИРОВАТЬ W, ЕСЛИ ЭТО НЕ НУЛЬ 9 Экран номер 9 ( 31.03.86 DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT ) : ?DUP ( W->W,W| 0->0 ) DUP IF DUP THEN ;
В FORTH ИТЭФ слово ?DUP называлось −DUP и было примитивом, который опирался на код примитива DUP, вот их определения:
HEAD 203Q,'DU',320Q,DUBL ; DUP POP AX DU: PUSH AX C$: PUSH AX NEXT HEAD 204Q,'-DU',320Q,DDUP ; -DUP POP AX CMP AX, 0 JNE DU JMP C$
Ссылки
- См. слова ↑ и 2DUP
- Слово ?DUP (question-dupe) в стандарте ANS Forth (англ.)
- Слово ?DUP (question-dupe) в черновике Forth 200x (англ.)
- КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ" в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Decisions, Decisions… в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |