U♯: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показано 16 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''U#''' — | '''U#''' — фортовское слово [[Каллисто]]. | ||
U# ( u −− u1 ) Преобразовать в литеру последнюю цифру из u и добавить к форматной строке. | |||
Преобразует одну цифру целого числа и записывает её в выходной буфер [[PAD]] | Преобразует одну цифру целого числа u и [[HOLD|записывает её]] в выходной буфер [[PAD]]. Выдаёт цифру всегда. Если преобразовывать нечего, записывается [[Символ 0|'0']]. | ||
== Ввод слова U# == | == Ввод слова U# == | ||
Строка 18: | Строка 18: | ||
См.: 6.1.0040 #>, 6.1.0050 #S, 6.1.0490 <#. | См.: 6.1.0040 #>, 6.1.0050 #S, 6.1.0490 <#. | ||
== # в предыдущем стандарте Forth-83 (англ.) == | == История == | ||
Каллистянское слово U# — адаптированное слово # , которое является стандартным и присутствует со времён Форта−79. | |||
Каллистянское U# оперирует лишь с одной ячейкой на вершине [[Стек данных|стека]]. Слово U# также присутствует в некоторых версиях Форта, откуда и было взято его имя. | |||
=== # в предыдущем стандарте 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 | ||
Строка 26: | Строка 31: | ||
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 | ||
Строка 33: | Строка 38: | ||
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 | ||
Строка 41: | Строка 46: | ||
See #S. | See #S. | ||
== Реализация U# == | == Реализация == | ||
Юрий Семёнов приводит следующее | <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# BASE @ /MOD ROT 9 OVER < IF 7 + THEN '0' + HOLD ; | ||
В ядре ФОРТ-ЕС слово U# работало с числовой парой и называлось # | В ядре ФОРТ-ЕС слово U# работало с числовой парой и называлось # | ||
Вот его определение: | Вот его описание и определение: | ||
<PRE> | <PRE> | ||
# D1->D2 ДЕЛЕНИЕМ D1 НА ЗНАЧЕНИЕ "BASE" 37 | |||
ВЫДЕЛИТЬ 1 ЦИФРУ С КОНЦА И ДОБАВИТЬ ЕЕ | |||
В БУФЕР "PAD", ОСТАВИВ ЧАСТНОЕ D2 | |||
Экран номер 37 | Экран номер 37 | ||
( 31.03.86 PAD HOLD ALPHA <# #> # #S SIGN ) | ( 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 ; | : # ( D1->D2) BASE @ M/MOD ROT ALPHA HOLD ; | ||
</PRE> | |||
В FORTH ИТЭФ слово U# работало с числовой парой и называлось # | |||
Вот его определение: | |||
<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> | </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:// | * Слово [http://forth-standard.org/standard/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://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] ''(англ.)'' | * [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] ''(англ.)'' | ||
Строка 67: | Строка 124: | ||
[[Категория:Слова высокого уровня]] | [[Категория:Слова высокого уровня]] | ||
[[Категория:Форматные преобразования Каллисто]] | [[Категория:Форматные преобразования Каллисто]] | ||
[[Категория: | [[Категория:Адаптированные слова]] | ||
[[Категория:Фортовские слова]] |
Текущая версия от 18:07, 10 ноября 2017
U# — фортовское слово Каллисто.
U# ( u −− u1 ) Преобразовать в литеру последнюю цифру из u и добавить к форматной строке.
Преобразует одну цифру целого числа u и записывает её в выходной буфер PAD. Выдаёт цифру всегда. Если преобразовывать нечего, записывается '0'.
Ввод слова U#[править]
В режиме ЛАТ последовательно нажмите клавиши 3 P F 3
Эти нажатия оставляют клавиатуру в режиме NUM.
# в стандарте ANS Forth[править]
6.1.0030 # "number-sign" CORE ( ud1 -- ud2 ) Делит ud1 числом в BASE, дает частное ud2 и остаток n. (n - младший разряд ud1.) Преобразовывает n к внешней форме и добавляет результирующий символ к началу выходной строки отображаемого числа. Неопределенная ситуация существует если # выполняется вне <# #> ограничивающих преобразование числа. См.: 6.1.0040 #>, 6.1.0050 #S, 6.1.0490 <#.
История[править]
Каллистянское слово U# — адаптированное слово # , которое является стандартным и присутствует со времён Форта−79.
Каллистянское U# оперирует лишь с одной ячейкой на вершине стека. Слово U# также присутствует в некоторых версиях Форта, откуда и было взято его имя.
# в предыдущем стандарте Forth-83 (англ.)[править]
# +d1 -- +d2 79 "sharp" The remainder of +d1 divided by the value of BASE is converted to an ASCII character and appended to the output string toward lower memory addresses. +d2 is the quotient and is maintained for further processing. Typically used between <# and #> .
# в стандарте Forth-79 (англ.)[править]
# ud1 -- ud2 158 "sharp" Generate from an unsigned double number d1, the next ASCII character which is placed in an output string. Result d2 is the quotient after division by BASE is maintained for further processing. Used between <# and #> .
# в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
# d1 --- d2 L0 Generate from a double number d1, the next ascii character which is placed in an output string. Result d2 is the quotient after division by BASE, and is maintained for further processing. Used between <# and #>. See #S.
Реализация[править]
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
Реализация из SP-Forth 4.20:
: # ( ud1 -- ud2 ) \ 94 \ Делением ud1 на значение BASE выделить одну цифру с конца и \ добавить ее в буфер форматного преобразования чисел, \ оставив частное ud2. \ Исключительная ситуация возникает, если использовать # \ вне <# и #>, ограничивающивающих преобразование чисел. 0 BASE @ UM/MOD >R BASE @ UM/MOD R> ROT DUP 10 < 0= IF 7 + THEN 48 + HOLD ;
Советская реализация[править]
Юрий Семёнов приводит следующее определение слова U# (стр. 100):
: U# BASE @ /MOD ROT 9 OVER < IF 7 + THEN '0' + HOLD ;
В ядре ФОРТ-ЕС слово U# работало с числовой парой и называлось #
Вот его описание и определение:
# 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 ;
В FORTH ИТЭФ слово U# работало с числовой парой и называлось #
Вот его определение:
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
Ссылки[править]
- Исходный текст слова U# в Каллисто Классик 1.0
- См. HOLD, SIGN и DIGIT
- Слово # (number-sign) в стандарте ANS Forth (англ.)
- Слово # (number-sign) в черновике Forth 200x (англ.)
- ЧИСЛО ТИПОВ ЧИСЕЛ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- A Number of Kinds of Numbers в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |