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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 109: Строка 109:
[[Категория:Интерпретация входного потока Каллисто]]
[[Категория:Интерпретация входного потока Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Архаичные слова]]

Версия от 17:55, 25 июня 2016

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

NUMBER         ( a −− n )                           Преобразовать строку в целое число n, начиная с a+1.

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

Строка a может хранить собственную длину в первом байте. Подразумевается, что после числа всегда идёт пробел, а строчные буквы уже преобразованы в заглавные.

Ввод слова NUMBER

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

Детали реализации

Трюк с SAVIN делает NUMBER при обработке 'c' интимно зависимым от INTERPRET

История

Слово NUMBER присутствует ещё в Форте−79, но у нас оно возвращает одну ячейку стека, а не двойную.

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

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

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

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 в ядре ФОРТ-ЕС:

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

Ссылки


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


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