Редактирование: ?DUP
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
'''?DUP''' (вопрос-дублировать, читается «вопрос-дуп») — стандартное слово [[Каллисто]]. Осуществляет операцию [[Слово ↑|↑]] если x≠0 | '''?DUP''' (вопрос-дублировать, читается «вопрос-дуп») — стандартное слово [[Каллисто]]. Осуществляет операцию [[Слово ↑|↑]] если x≠0. | ||
?DUP ( x | ?DUP ( x -- 0 | x x ) | ||
Дублирует верхнее значение, если это не ноль, и оставляет [[Стек данных|стек]] в исходном состоянии, если на вершине ноль. | Дублирует верхнее значение, если это не ноль, и оставляет [[Стек данных|стек]] в исходном состоянии, если на вершине ноль. | ||
Строка 7: | Строка 8: | ||
Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]]. | Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]]. | ||
== Детали реализации == | |||
Слово ?DUP часто используется перед [[IF]]. | |||
== ?DUP в стандарте ANS Forth == | == ?DUP в стандарте ANS Forth == | ||
Строка 13: | Строка 17: | ||
Дублирует x, если оно ненулевое. | Дублирует x, если оно ненулевое. | ||
== ?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 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 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. | ||
Строка 37: | Строка 32: | ||
the need for an ELSE part to drop it. | the need for an ELSE part to drop it. | ||
== Реализация | == Реализация ?DUP == | ||
У Баранова-Ноздрунова приводится следующее описание слова ?DUP (стр. 29): | |||
У Баранова-Ноздрунова приводится следующее | |||
: ?DUP ( A ---> A,A / 0 ) ↑ IF ↑ THEN ; | : ?DUP ( A ---> A,A / 0 ) ↑ IF ↑ THEN ; | ||
Определение слова ?DUP в ядре ФОРТ-ЕС: | |||
<PRE> | <PRE> | ||
Экран номер 9 | Экран номер 9 | ||
( 31.03.86 DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT ) | ( 31.03.86 DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT ) | ||
Строка 96: | Строка 43: | ||
: ?DUP ( W->W,W| 0->0 ) DUP IF DUP THEN ; | : ?DUP ( W->W,W| 0->0 ) DUP IF DUP THEN ; | ||
</PRE> | </PRE> | ||
== История == | |||
При переносе на [[Каллисто]] старых программ, написанных для fig-Форта, нужно заменять старое наименование −DUP на новое ?DUP | |||
В Форте FSP88M это слово известно под именем ?DU | |||
Слово ?DUP подвергается критике, т.к. оставляет на стеке разное количество элементов, что является плохим стилем программирования. В {{colorForth}} слово ?DUP нет, т.к. IF там неразрушающий. | |||
== Ссылки == | == Ссылки == | ||
* См. слово [[Слово ↑|↑]] | |||
* См. | |||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0630 ?DUP (question-dupe)] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0630 ?DUP (question-dupe)] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http:// | * Слово [http://www.forth200x.org/documents/html3/core/qDUP.html ?DUP (question-dupe)] в черновике Forth 200x ''(англ.)'' | ||
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\04.%20KOMPJUTER%20%22PRINIMAET%20RESENIA%22 КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ"] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\04.%20KOMPJUTER%20%22PRINIMAET%20RESENIA%22 КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ"] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | ||
* [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | * [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | ||
Строка 126: | Строка 64: | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
[[Категория:Стековые манипуляции Каллисто]] | [[Категория:Стековые манипуляции Каллисто]] | ||
[[Категория: | [[Категория:Описание бета-версии Каллисто]] | ||