Редактирование: U♯

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''U#''' — фортовское слово [[Каллисто]].
'''U#''' — стандартное слово [[Каллисто]].
U#            ( u −− u1 )                          Преобразовать в литеру последнюю цифру из u и добавить к форматной строке.
 
Преобразует одну цифру целого числа u и [[HOLD|записывает её]] в выходной буфер [[PAD]]. Выдаёт цифру всегда. Если преобразовывать нечего, записывается [[Символ 0|'0']].
Преобразует одну цифру целого числа и записывает её в выходной буфер [[PAD]]


== Ввод слова 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
Строка 31: Строка 26:
           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: Строка 33:
     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
Строка 47: Строка 42:


== Реализация ==
== Реализация ==
<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# (стр. 100):
   : U#  BASE @ /MOD ROT 9 OVER < IF 7 + THEN '0' + HOLD ;
   : U#  BASE @ /MOD ROT 9 OVER < IF 7 + THEN '0' + HOLD ;
Строка 111: Строка 74:


== Ссылки ==
== Ссылки ==
* {{Исходник|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/html3/core/num.html # (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] ''(англ.)''
Строка 124: Строка 85:
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Форматные преобразования Каллисто]]
[[Категория:Форматные преобразования Каллисто]]
[[Категория:Адаптированные слова]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Фортовские слова]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/U♯