NUMBER: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:
'''NUMBER''' — стандартное слово [[Каллисто]].
'''NUMBER''' — встроенное слово [[Каллисто]].


Преобразует в число последовательность символов, начиная с a+1 с учётом [[BASE]].
Преобразует в число последовательность символов, начиная с a+1 с учётом [[BASE]].
Строка 32: Строка 32:


Первый NUMBER использовался словом [[INTERPRET]] для преобразования слов в двоичный вид, в данном случае чисел с плавающей запятой.
Первый NUMBER использовался словом [[INTERPRET]] для преобразования слов в двоичный вид, в данном случае чисел с плавающей запятой.
Слово NUMBER исключено из стандарта Форта 1994 года и его нет в черновике Форта-2012. Реализация в [[Каллисто]] отлична от старых стандартов, т.к. использует лишь один элемент стека, а не числовую пару.


== Реализация ==
== Реализация ==

Версия от 19:36, 6 июня 2016

NUMBER — встроенное слово Каллисто.

Преобразует в число последовательность символов, начиная с a+1 с учётом BASE.

Ввод слова NUMBER

В режиме ЛАТ последовательно нажмите клавиши  4   3   ÷   В/О   ИП   × 

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

     NUMBER       addr -- d
          Convert the count and character string at addr, to a signed
          32-bit integer, using the value of BASE .  If numeric
          conversion is not possible, an error condition exists.  The
          string may contain a preceding minus sign.

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

NUMBER         addr -- n
    Convert  the count and character string at addr,  to a  signed
    32-bit integer, using the current base.  If numeric conversion
    is not possible,  an error condition exists.   The string  may
    contain a preceding negative sign.

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

NUMBER        addr   ---   d
       Convert a character string left at addr with a preceeding count, to
       a signed .double number, using the current numeric base. If a
       decimal point is encountered in the text, its position will be
       given in DPL, but no other effect occurs. If numeric conversion is
       not possible, an error message will be given.

История

Слово NUMBER появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 для САО. Тогда оно ещё не называлось NUMBER, так в то время команды Форта кодировались числами.

Первый NUMBER использовался словом INTERPRET для преобразования слов в двоичный вид, в данном случае чисел с плавающей запятой.

Слово NUMBER исключено из стандарта Форта 1994 года и его нет в черновике Форта-2012. Реализация в Каллисто отлична от старых стандартов, т.к. использует лишь один элемент стека, а не числовую пару.

Реализация

Описание и определение слова NUMBER в ядре ФОРТ-ЕС:

NUMBER    +  T->WD ПРЕОБРАЗОВАТЬ СТРОКУ Т В ЧИСЛО WD            39

                     Экран номер 39
( 31.03.86      DIGIT CONVERT  NUMBER )

: NUMBER  ( T->WD )
  0 0 ROT DUP >R COUNT OVER + OVER С@ С" - =
  DUP >R SWAP >R IF ELSE 1- THEN -1
  BEGIN DPL !  CONVERT DUP R@ <  WHILE DUP С@
  С" . <> IF RDROP RDROP R> BADWORD THEN 0
  REPEAT DROP RDROP R> IF DNEGATE THEN RDROP ;

Определение слов (NUMBER) и NUMBER в FORTH ИТЭФ:

             HEAD    210Q,'(NUMBER',251Q,PNUMB,$COL       ; (NUMBER)
   BN:       DW  ONEP,TOR,I,CAT,BASE,AT,DIGIT,ZBRAN,MMO-$
             DW  SWAP,BASE,AT,USTAR,DROP,ROT,BASE,AT,USTAR
             DW  DPLUS,DPL,AT,ONEP,ZBRAN,BN1-$,ONE,DPL,PSTOR
   BN1:      DW  FROMR,BRAN,BN-$
   MMO:      DW  FROMR,SEMI
             ...
             HEAD    206Q,'NUMBE',322Q,NUMB,$COL          ; NUMBER
             DW  ZERO,$EX,STORE,BASE,AT,ZERO,ROT
             DW  ONEP,DUBL,CAT,DUBL,LIT,53Q,EQUAL
             DW  ZBRAN,NH1-$,DEC,DROP,BRAN,NH4-$
   NH1:      DW  DUBL,LIT,55Q,EQUAL,ZBRAN,NH2-$,DROP,DEC
             DW  SWAP,DROP,ONE,SWAP,BRAN,NH4-$
   NH2:      DW  LIT,47Q,EQUAL,ZBRAN,NH3-$,OCTAL,ONEP
   NH3:      DW  ONEM
   NH4:      DW  LIT,-1,DPL,STORE,ZERO,ZERO,ROT,PNUMB,DUBL
             DW  CAT,BLAN,SUB,ZBRAN,NH6-$
             DW  DUBL,CAT,LIT,56Q,EQUAL,ZBRAN,EXP-$
             DW  ZERO,DPL,STORE,PNUMB,DUBL,CAT,BLAN,SUB,ZBRAN,NH6-$
   EXP:      DW  DPL,AT,SWAP,DUBL,CAT,LIT
             DW  105Q,EQUAL,ZBRAN,ER1-$,ONEP,DUBL,CAT
             DW  LIT,55Q,EQUAL,ZBRAN,NEMI-$,ONE,BRAN,NH0-$
   NEMI:     DW  DUBL,CAT,LIT,53Q,SUB,ZBRAN,PLU-$,ONEM
   PLU:      DW  ZERO
   NH0:      DW  SWAP,ZERO,ZERO,ROT,PNUMB,CAT,BLAN,EQUAL,ZBRAN,ER-$
             DW  DROP,SWAP,ZBRAN,NH5-$,MINUS
   NH5:      DW  $EX,STORE,DPL,STORE,ZERO
   NH6:      DW  DROP,ROT,ZBRAN,NH7-$,DMINU
   NH7:      DW  ROT,BASE,STORE,SEMI
   ER:       DW  DDROP,DROP
   ER1:      DW  DDROP,DDROP,DROP,ZERO,ERROR,SEMI

Ссылки


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


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