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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''U#''' — фортовское слово [[Каллисто]].
'''I#''' — стандартное слово [[Каллисто]].
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 ;
</PRE>
В FORTH ИТЭФ слово U# работало с числовой парой и называлось #


Вот его определение:
== Реализация I# ==
<PRE>
Юрий Семёнов приводит следующее описание слова I# (стр. 100):
            HEAD    201Q,,243Q,DIG,$COL                  ; #
  : I#   BASE @ /MOD ROT '11 OVER < IF 7 + THEN '60 + HOLD ;
            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: Строка 53:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Форматные преобразования Каллисто]]
[[Категория:Форматные преобразования Каллисто]]
[[Категория:Адаптированные слова]]
[[Категория:Фортовские слова]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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