U♯S

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

U#S — фортовское слово Каллисто.

U#S            ( u −− 0 )                           Выделять цифры числа u словом U# до получения нуля.

Преобразует целое положительное число u до тех пор, пока не будет получен 0. Одна цифра выдаётся в любом случае ('0').

Ввод слова U#S

В режиме ЛАТ последовательно нажмите клавиши  3     P   F   3     Р-ГРД-Г   1 

#S в стандарте ANS Forth

 6.1.0050   #S                         "number-sign-s"                      CORE
            ( ud1 -- ud2 )
            Преобразует одну цифру ud1 согласно правилу для #. Продолжает 
            преобразование до нулевого частного. ud2 нулевое. Неопределенная 
            ситуация существует, если #S выполняется вне <# #> ограничивающих 
            преобразование числа.

        См.: 6.1.0030 #, 6.1.0040 #>, 6.1.0490 <#.

История

Каллистянское слово U#S — адаптированное слово S# , которое является стандартным и известно со времён Форта−79.

Каллистянское U#S оперирует лишь с одной ячейкой на вершине стека. Слово U#S также присутствует в некоторых версиях Форта, откуда и было взято его имя.

#S в предыдущем стандарте Forth-83 (англ.)

     #S           +d -- 0 0                     79           "sharp-s"
          +d is converted appending each resultant character into the
          pictured numeric output string until the quotient (see: # )
          is zero.  A single zero is added to the output string if the
          number was initially zero.  Typically used between <# and
          #> .

#S в стандарте Forth-79 (англ.)

#S             ud -- 0 0                     209          "sharp-s"
    Convert  all digits of an unsigned 32-bit  number  ud,  adding
    each  to the pictured numeric output text,  until remainder is
    zero.   A  single  zero is added to the output string  if  the
    number was initially zero.  Use only between <# and #>.

#S в fig-FORTH Release 1 glossary, май 1979 (англ.)

#S             d1  ---  d2                       L0
       Generates ascii text in the text output buffer, by the use of #,
       until a zero double number n2 results.
       Used between <# and #>.

Реализация

3792 ;#UnumS
3793 ; U#S              ( u −− 0 )                           Выделять цифры числа u словом U# до получения нуля.
3794 ; Преобразовать целое число u до тех пор, пока не будет получен 0
3795 ; Одна цифра выдаётся в любом случае ('0')
3796 LDIGS:          .DB     3
3797                 .TEXT   "U#S"                   ; ( целое −− 0)
3798                 .DW     LDIG
3799 DIGS:           .DW CALL
3800 DIS:            .DW DIG, DUP,ZEQU, ZBRAN,DIS, EXIT

Реализация из SP-Forth 4.20:

: #S ( ud1 -- ud2 ) \ 94
\ Выделять цифры D1 по слову # до получения нуля.
\ ud2 - ноль.
\ Исключительная ситуация возникает, если использовать #S
\ вне <# и #>, ограничивающивающих преобразование чисел.
  BEGIN
    # 2DUP D0=
  UNTIL
;

Советская реализация

Определение слова U#S приводится у Юрия Семёнова (стр. 100) и у Баранова-Ноздрунова (стр. 37):

 : U#S   ( A ---> 0 )    BEGIN U# ↑ 0= UNTIL ;

В ядре ФОРТ-ЕС и FORTH ИТЭФ слово U#S называлось #S и работало с числовой парой. Вот описание и определение #S из ядра ФОРТ-ЕС:

#S        D1->0,0 ВЫДЕЛЯТЬ ЦИФРЫ D1 ПО СЛОВУ "#" ДО             37
          ПОЛУЧЕНИЯ НУЛЯ

                     Экран номер 37
( 31.03.86  PAD  HOLD  ALPHA  <# #> # #S SIGN )

: #S  ( D->0,0)  BEGIN # 2DUP OR 0= UNTIL ;

Вот определение #S из FORTH ИТЭФ:

             HEAD    202Q,'#',323Q,DIGS,$COL              ; #S
   DIS:      DW  DIG,DUP2,$OR,ZEQU,ZBRAN,DIS-$,SEMI

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.