?DUP

Материал из ПМК вики
Перейти к навигации Перейти к поиску

?DUP (вопрос-дублировать) — стандартное слово Каллисто. Осуществляет операцию если x≠0.

?DUP           ( x -- 0 | x x )

Дублирует верхнее значение, если это не ноль, и оставляет стек в исходном состоянии, если на вершине ноль.

Детали реализации

Слово ?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.

Реализация ?DUP

У Баранова-Ноздрунова приводится следующее описание слова ?DUP (стр. 29):

 : ?DUP   ( A ---> A,A / 0 )    ↑ IF ↑ THEN ;

История

При переносе на Каллисто старых программ, написанных для fig-Форта, нужно заменять старое наименование −DUP на новое ?DUP

В Форте FSP88M это слово известно под именем ?DU

В colorFORTH слово ?DUP не требуется, т.к. IF там неразрушающий.

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.