Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''U#''' — фортовское слово [[Каллисто]]. | | '''U#''' — стандартное слово [[Каллисто]]. |
| U# ( u −− u1 ) Преобразовать в литеру последнюю цифру из u и добавить к форматной строке.
| |
| Преобразует одну цифру целого числа u и [[HOLD|записывает её]] в выходной буфер [[PAD]]. Выдаёт цифру всегда. Если преобразовывать нечего, записывается [[Символ 0|'0']].
| |
|
| |
|
| == Ввод слова U# ==
| | Преобразует одну цифру целого числа и записывает её в выходной буфер [[PAD]] |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша 3|{{Серая клавиша|3}}]]
| |
|
| |
|
| Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]].
| |
|
| |
|
| == # в стандарте ANS Forth == | | == # в стандарте ANS Forth == |
Строка 18: |
Строка 14: |
| См.: 6.1.0040 #>, 6.1.0050 #S, 6.1.0490 <#. | | См.: 6.1.0040 #>, 6.1.0050 #S, 6.1.0490 <#. |
|
| |
|
| == История ==
| |
| Каллистянское слово U# — адаптированное слово # , которое является стандартным и присутствует со времён Форта−79.
| |
|
| |
|
| Каллистянское U# оперирует лишь с одной ячейкой на вершине [[Стек данных|стека]]. Слово U# также присутствует в некоторых версиях Форта, откуда и было взято его имя.
| | == # в предыдущем стандарте Forth-83 (англ.) == |
| | |
| === # в предыдущем стандарте Forth-83 (англ.) ===
| |
| # +d1 -- +d2 79 "sharp" | | # +d1 -- +d2 79 "sharp" |
| The remainder of +d1 divided by the value of BASE is | | The remainder of +d1 divided by the value of BASE is |
Строка 31: |
Строка 23: |
| between <# and #> . | | between <# and #> . |
|
| |
|
| === # в стандарте Forth-79 (англ.) ===
| | |
| | == # в стандарте Forth-79 (англ.) == |
| # ud1 -- ud2 158 "sharp" | | # ud1 -- ud2 158 "sharp" |
| Generate from an unsigned double number d1, the next ASCII | | Generate from an unsigned double number d1, the next ASCII |
Строка 38: |
Строка 31: |
| processing. Used between <# and #> . | | processing. Used between <# and #> . |
|
| |
|
| === # в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| | |
| | == # в fig-FORTH Release 1 glossary, май 1979 (англ.) == |
| # d1 --- d2 L0 | | # d1 --- d2 L0 |
| Generate from a double number d1, the next ascii character which is | | Generate from a double number d1, the next ascii character which is |
Строка 46: |
Строка 40: |
| See #S. | | See #S. |
|
| |
|
| == Реализация ==
| |
| <pre>
| |
| 3776 ;#Unum
| |
| 3777 ; U# ( u −− u1 ) Преобразовать в литеру последнюю цифру из u и добавить к форматной строке.
| |
| 3778 ; Преобразовать одну цифру целого числа и записать её в выходной буфер PAD
| |
| 3779 ; Выдать цифру всегда, если преобразовывать нечего, записать '0'.
| |
| 3780 LDIG: .DB 2
| |
| 3781 .TEXT "U#" ; ( x1 −− x2)
| |
| 3782 .DW LSIGN
| |
| 3783 DIG: .DW CALL, BASE,UAT, SLMOD, SWAP, LITB
| |
| 3784 .DB 9
| |
| 3785 .DW OVER, LESS, ZBRAN,DIGI, LITB
| |
| 3786 .DB 39 ; 7 если заглавные буквы
| |
| 3787 .DW PLUS
| |
| 3788 DIGI: .DW LITB
| |
| 3789 .DB 48
| |
| 3790 .DW PLUS, HOLD, EXIT
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| : # ( ud1 -- ud2 ) \ 94
| |
| \ Делением ud1 на значение BASE выделить одну цифру с конца и
| |
| \ добавить ее в буфер форматного преобразования чисел,
| |
| \ оставив частное ud2.
| |
| \ Исключительная ситуация возникает, если использовать #
| |
| \ вне <# и #>, ограничивающивающих преобразование чисел.
| |
| 0 BASE @ UM/MOD >R BASE @ UM/MOD R>
| |
| ROT DUP 10 < 0= IF 7 + THEN 48 +
| |
| HOLD
| |
| ;
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| Юрий Семёнов приводит следующее определение слова U# (стр. 100):
| |
| : U# BASE @ /MOD ROT 9 OVER < IF 7 + THEN '0' + HOLD ;
| |
|
| |
| В ядре ФОРТ-ЕС слово U# работало с числовой парой и называлось #
| |
|
| |
| Вот его описание и определение:
| |
| <PRE>
| |
| # D1->D2 ДЕЛЕНИЕМ D1 НА ЗНАЧЕНИЕ "BASE" 37
| |
| ВЫДЕЛИТЬ 1 ЦИФРУ С КОНЦА И ДОБАВИТЬ ЕЕ
| |
| В БУФЕР "PAD", ОСТАВИВ ЧАСТНОЕ D2
| |
|
| |
| Экран номер 37
| |
| ( 31.03.86 PAD HOLD ALPHA <# #> # #S SIGN )
| |
|
| |
| CODE ALPHA ( N->C) RW2 FIRST LH,
| |
| RW1 RW1 SR, RW1 1 =F (, RW2 IC, PUTRW1 B,
| |
| 1 =H C, ' 01234S478<?ABCDEFGHIJKLMNOPQRSTUVWXYZ'
| |
| END-CODE
| |
|
| |
|
| : # ( D1->D2) BASE @ M/MOD ROT ALPHA HOLD ;
| | == Реализация U# == |
| </PRE>
| | Юрий Семёнов приводит следующее описание слова U# (стр. 100): |
| В FORTH ИТЭФ слово U# работало с числовой парой и называлось #
| | : U# BASE @ /MOD ROT '11 OVER < IF 7 + THEN '60 + HOLD ; |
|
| |
|
| Вот его определение:
| |
| <PRE>
| |
| HEAD 201Q,,243Q,DIG,$COL ; #
| |
| DW BASE,AT,MSMOD,ROT,LIT,11Q,OVER,LESS
| |
| DW ZBRAN,DIGI-$,LIT,7,PLUS
| |
| DIGI: DW LIT,60Q,PLUS,HOLD,SEMI
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|Unum|U#}}
| |
| * См. [[HOLD]], [[SIGN]] и [[DIGIT]]
| |
| * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0030 Слово # (number-sign) в стандарте ANS Forth] ''(англ.)'' | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0030 Слово # (number-sign) в стандарте ANS Forth] ''(англ.)'' |
| * Слово [http://forth-standard.org/standard/core/num # (number-sign)] в черновике Forth 200x ''(англ.)'' | | * [http://www.forth200x.org/documents/html/core.html#core:num Слово # (number-sign) в черновике Forth 200x] ''(англ.)'' |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\07.TISLO%20TIPOW%20TISEL ЧИСЛО ТИПОВ ЧИСЕЛ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [http://www.forth.com/starting-forth/sf7/sf7.html A Number of Kinds of Numbers] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
|
| |
|
|
| |
|
Строка 122: |
Строка 54: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Форматные преобразования Каллисто]] | | [[Категория:Форматные преобразования Каллисто]] |
| [[Категория:Адаптированные слова]] | | [[Категория:Слова Каллисто без стековых диаграмм]] |
| [[Категория:Фортовские слова]]
| |