?DUP: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 13: | Строка 13: | ||
Дублирует x, если оно ненулевое. | Дублирует x, если оно ненулевое. | ||
== ?DUP в предыдущем стандарте Forth-83 (англ.) == | == История == | ||
При переносе на [[Каллисто]] старых программ, написанных для fig-Форта, нужно заменять старое наименование −DUP на новое ?DUP | |||
В Форте FSP88M это слово известно под именем ?DU (три литеры). | |||
Слово ?DUP подвергается критике, т.к. оставляет на [[Стек данных|стеке]] разное количество элементов, что является плохим стилем программирования. Чаще всего ?DUP используется для компенсации того, что [[IF]] снимает со [[Стек данных|стека]] свой аргумент. В {{colorForth}} слово ?DUP нет, т.к. [[IF]] там неразрушающий. | |||
=== ?DUP в предыдущем стандарте Forth-83 (англ.) === | |||
?DUP 16b -- 16b 16b 79 "question-dupe" | ?DUP 16b -- 16b 16b 79 "question-dupe" | ||
or 0 -- 0 | or 0 -- 0 | ||
Duplicate 16b if it is non-zero. | Duplicate 16b if it is non-zero. | ||
== ?DUP в стандарте Forth-79 (англ.) == | === ?DUP в стандарте Forth-79 (англ.) === | ||
?DUP n -- n ( n ) 184 "query-dupe" | ?DUP n -- n ( n ) 184 "query-dupe" | ||
Duplicate n if it is non-zero. | Duplicate n if it is non-zero. | ||
== −DUP в fig-FORTH Release 1 glossary, май 1979 (англ.) == | === −DUP в fig-FORTH Release 1 glossary, май 1979 (англ.) === | ||
-DUP n1 -- n1 (if zero) n1 -- n1 n1 (non-zero) L0 | -DUP n1 -- n1 (if zero) n1 -- n1 n1 (non-zero) L0 | ||
Reproduce n1 only if it is non-zero. | Reproduce n1 only if it is non-zero. | ||
This is usually used to copy a value just before IF, to eliminate | This is usually used to copy a value just before IF, to eliminate | ||
the need for an ELSE part to drop it. | the need for an ELSE part to drop it. | ||
== Реализация == | == Реализация == |
Версия от 20:13, 5 июня 2016
?DUP (вопрос-дублировать, читается «вопрос-дуп») — стандартное слово Каллисто. Осуществляет операцию ↑ если x≠0 (истина).
?DUP ( x −− 0 | x x ) Дублировать, если x<>0.
Дублирует верхнее значение, если это не ноль, и оставляет стек в исходном состоянии, если на вершине ноль.
Ввод слова ?DUP
В режиме NUM последовательно нажмите клавиши K Р-ГРД-Г K 3 6
Для возврата в режим NUM нажмите синюю клавишу P .
?DUP в стандарте ANS Forth
6.1.0630 ?DUP "question-dupe" CORE ( x -- 0 | x x ) Дублирует x, если оно ненулевое.
История
При переносе на Каллисто старых программ, написанных для fig-Форта, нужно заменять старое наименование −DUP на новое ?DUP
В Форте FSP88M это слово известно под именем ?DU (три литеры).
Слово ?DUP подвергается критике, т.к. оставляет на стеке разное количество элементов, что является плохим стилем программирования. Чаще всего ?DUP используется для компенсации того, что IF снимает со стека свой аргумент. В colorForth слово ?DUP нет, т.к. IF там неразрушающий.
?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.
Реализация
У Баранова-Ноздрунова приводится следующее определение слова ?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$
Ссылки
- Исходный текст слова ?DUP в Каллисто Классик 1.0
- См. слова ↑ и 2DUP
- Слово ?DUP (question-dupe) в стандарте ANS Forth (англ.)
- Слово ?DUP (question-dupe) в черновике Forth 200x (англ.)
- КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ" в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Decisions, Decisions… в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |