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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''U#''' — фортовское слово [[Каллисто]].
'''I#''' — стандартное слово [[Каллисто]].
U#            ( u −− u1 )                          Преобразовать в литеру последнюю цифру из u и добавить к форматной строке.
Преобразует одну цифру целого числа u и [[HOLD|записывает её]] в выходной буфер [[PAD]]. Выдаёт цифру всегда. Если преобразовывать нечего, записывается [[Символ 0|'0']].
 
== Ввод слова U# ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 3|{{Серая клавиша|3}}]]   [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша 3|{{Серая клавиша|3}}]]
 
Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме 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.
 
== Реализация ==
<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# работало с числовой парой и называлось #
 
Вот его определение:
<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-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://www.forth.com/starting-forth/sf7/sf7.html A Number of Kinds of Numbers] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
 


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Форматные преобразования Каллисто]]
[[Категория:Адаптированные слова]]
[[Категория:Фортовские слова]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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