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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 47: Строка 47:
   С" . <> IF RDROP RDROP R> BADWORD THEN 0
   С" . <> IF RDROP RDROP R> BADWORD THEN 0
   REPEAT DROP RDROP R> IF DNEGATE THEN RDROP ;
   REPEAT DROP RDROP R> IF DNEGATE THEN RDROP ;
</PRE>
Определение слов (NUMBER) и NUMBER в FORTH ИТЭФ:
<PRE>
            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
</PRE>
</PRE>



Версия от 01:37, 28 марта 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 в ядре ФОРТ-ЕС:

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

Ссылки


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


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