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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 27 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''CONVERT''' — стандартное слово [[Каллисто]].
'''UCONVERT''' — фортовское слово [[Каллисто]]. Преобразовать последовательность цифр в целое, с учётом [[BASE]].
UCONVERT      ( u a −− u1 a1 )                    Преобразовать u и литеры от a+1 в u1 и a1 −− адрес первой не цифры.


== Ввод слова UCONVERT ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 2|{{Серая клавиша|2}}]]


== CONVERT в стандарте ANS Forth ==
== CONVERT в стандарте ANS Forth ==
<pre>
  6.2.0970  CONVERT                                                    CORE EXT
  6.2.0970  CONVERT                                                    CORE EXT
             ( ud1 c-addr1 -- ud2 c-addr2 )
             ( ud1 c-addr1 -- ud2 c-addr2 )
Строка 22: Строка 26:


         : CONVERT  CHAR+ 65535 >NUMBER DROP ;
         : CONVERT  CHAR+ 65535 >NUMBER DROP ;
</pre>


== История ==
В стандарте Форта 1994 года слово CONVERT было определено, как устаревшее. Его нет в черновике стандарта 200x года. Эволюция Форта привела к победе слова >NUMBER — в котором явно указана максимальная длина строки для преобразования.


== CONVERT в предыдущем стандарте Forth-83 (англ.) ==
Каллистянское слово UCONVERT нестандартное, т.к. в стандарте Форт-94 вместо u прописана пара чисел ud1.
 
=== CONVERT в предыдущем стандарте Forth-83 (англ.) ===
       CONVERT      +d1 addr1 -- +d2 addr2        79
       CONVERT      +d1 addr1 -- +d2 addr2        79
           +d2 is the result of converting the characters within the
           +d2 is the result of converting the characters within the
Строка 33: Строка 42:
           of the first unconvertible character.
           of the first unconvertible character.


 
=== CONVERT в стандарте Forth-79 (англ.) ===
== CONVERT в стандарте Forth-79 (англ.) ==
  CONVERT        d1 addr1 -- d2 addr2          195
  CONVERT        d1 addr1 -- d2 addr2          195
     Convert  to the equivalent stack number the text beginning  at
     Convert  to the equivalent stack number the text beginning  at
Строка 41: Строка 49:
     of the first non-convertible character.
     of the first non-convertible character.


 
=== (NUMBER) в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== (NUMBER) в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
(NUMBER)       d1 addr1 --- d2 addr2
(NUMBER) d1 addr1 --- d2 addr2
         Convert the ascii text beginning at addr1+l with regard to BASE. The
         Convert the ascii text beginning at addr1+l with regard to BASE. The
         new value is accumulated into double number d1, being left as d2.
         new value is accumulated into double number d1, being left as d2.
Строка 49: Строка 56:
         NUMBER.
         NUMBER.


== Реализация ==
<pre>
3183 ;#UCONVERT
3184 ; UCONVERT        ( u a −− u1 a1 )                    Преобразовать u и литеры от a+1 в u1 и a1 −− адрес первой не цифры.
3185 LPNUMB:        .DB    8
3186                .TEXT  "UCONVERT"
3187                .DW    LWORD
3188 PNUMB:          .DW CALL
3189 BN:            .DW ONEP, DUP,TOR, CAT, BASE,UAT, DIGIT, ZBRAN,MMO
3190                .DW SWAP, BASE,UAT,STAR, PLUS
3191                .DW DPL,AT, ONEP, ZBRAN,BN1, ONE,DPL,PSTOR      ; Увеличить DPL на единицу, если там не −1
3192 BN1:            .DW FROMR, BRAN,BN
3193 MMO:            .DW FROMR, EXIT
</pre>
Реализация из SP-Forth 4.20:
<pre>
: >NUMBER ( ud1 c-addr1 u1 -- ud2 c-addr2 u2 ) \ 94
\ ud2 - результат преобразования символов строки, заданной c-addr1 u1,
\ в цифры, используя число в BASE, и добавлением каждой к ud1 после
\ умножения ud1 на число в BASE. Преобразование продолжается слева
\ направо до первого непреобразуемого символа, включая символы "+" и "-",
\ или до полного преобразования строки.
\ c-addr2 - адрес первого непреобразумого символа или первого символа
\ за концом строки, если строка была полностью преобразована.
\ u2 - число непреобразованных символов в строке.
\ Неоднозначная ситуация возникает, если ud2 переполняется во время
\ преобразования.
  BEGIN
    DUP
  WHILE
    >R
    DUP >R
    C@ BASE @ DIGIT 0=    \ ud n flag
    IF R> R> EXIT THEN    \ ud n  ( ud = udh udl )
    SWAP BASE @ UM* DROP  \ udl n udh*base
    ROT BASE @ UM* D+      \ (n udh*base)+(udl*baseD)
    R> CHAR+ R> 1-
  REPEAT
;
</pre>


== История ==
=== Советская реализация ===
В стандарте Форта 1994 года слово CONVERT было определено, как устаревшее. Его нет в черновике стандарта 200x года.
Описание и определение слова CONVERT в ядре ФОРТ-ЕС:
<PRE>
CONVERT   WD1,A1,->WD2,A2 ПРЕОБРАЗОВАТЬ WD1 И ЛИТЕРЫ            39
          ОТ А1+1 В WD2 И А2 - АДРЕС 1-ОЙ НЕ ЦИФРЫ
 
                    Экран номер 39
( 31.03.86      DIGIT CONVERT  NUMBER )


: CONVERT ( WD1,AI->WD2,A2)
BEGIN 1+ DUP >R C@ BASE @ DIGIT WHILE
    SWAP BASE @ UM* DROP ROT BASE @ UM* D+
    DPL @ 1+ IF DPL 1+! THEN R> REPEAT R> ;
</PRE>


== Ссылки ==
== Ссылки ==
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.2.0970 Слово CONVERT в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.2.0970 комментарий к нему] ''(англ.)''
* {{Исходник|UCONVERT|UCONVERT}}
* См. слова [[DIGIT]], [[BASE]] и [[NUMBER]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.2.0970 CONVERT] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.2.0970 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




Строка 61: Строка 123:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Адаптированные слова]]
[[Категория:Фортовские слова]]
[[Категория:Архаичные слова]]

Текущая версия от 18:20, 10 ноября 2017

UCONVERT — фортовское слово Каллисто. Преобразовать последовательность цифр в целое, с учётом BASE.

UCONVERT       ( u a −− u1 a1 )                     Преобразовать u и литеры от a+1 в u1 и a1 −− адрес первой не цифры.

Ввод слова UCONVERT[править]

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

CONVERT в стандарте ANS Forth[править]

 6.2.0970   CONVERT                                                     CORE EXT
            ( ud1 c-addr1 -- ud2 c-addr2 )
            ud2 - результат преобразования символов в пределах текста 
            начинающегося с первого символа после c-addr1 в цифры, используя 
            число из BASE, и добавление каждой цифры в ud1 после умножения ud1 
            на число из BASE. Преобразование продолжается до встречи с не 
            преобразуемым символом. c-addr2 - адрес ячейки первого не 
            преобразованного символа. Неопределенная ситуация существует, если 
            ud2 переполняется.

        Примечание: Это слово устаревшее и включено как уступка существующим 
            реализациям. Его функция заменена на 6.1.0570 >NUMBER.

        См.: 3.2.1.2 Преобразование цифр.

 A.6.2.0970   CONVERT
 CONVERT может быть определено следующим образом:

        : CONVERT   CHAR+ 65535 >NUMBER DROP ;

История[править]

В стандарте Форта 1994 года слово CONVERT было определено, как устаревшее. Его нет в черновике стандарта 200x года. Эволюция Форта привела к победе слова >NUMBER — в котором явно указана максимальная длина строки для преобразования.

Каллистянское слово UCONVERT нестандартное, т.к. в стандарте Форт-94 вместо u прописана пара чисел ud1.

CONVERT в предыдущем стандарте Forth-83 (англ.)[править]

     CONVERT      +d1 addr1 -- +d2 addr2        79
          +d2 is the result of converting the characters within the
          text beginning at addr1+1 into digits, using the value of
          BASE , and accumulating each into +d1 after multiplying +d1
          by the value of BASE .  Conversion continues until an
          unconvertible character is encounter.  addr2 is the location
          of the first unconvertible character.

CONVERT в стандарте Forth-79 (англ.)[править]

CONVERT        d1 addr1 -- d2 addr2          195
    Convert  to the equivalent stack number the text beginning  at
    addr1+1  with regard to BASE.   The new value  is  accumulated
    into double number d1, being left as d2.  addr2 is the address
    of the first non-convertible character.

(NUMBER) в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

(NUMBER)       d1 addr1 --- d2 addr2
       Convert the ascii text beginning at addr1+l with regard to BASE. The
       new value is accumulated into double number d1, being left as d2.
       Addr2 is the address of the first unconvertable digit. Used by
       NUMBER.

Реализация[править]

3183 ;#UCONVERT
3184 ; UCONVERT         ( u a −− u1 a1 )                     Преобразовать u и литеры от a+1 в u1 и a1 −− адрес первой не цифры.
3185 LPNUMB:         .DB     8
3186                 .TEXT   "UCONVERT"
3187                 .DW     LWORD
3188 PNUMB:          .DW CALL
3189 BN:             .DW ONEP, DUP,TOR, CAT, BASE,UAT, DIGIT, ZBRAN,MMO
3190                 .DW SWAP, BASE,UAT,STAR, PLUS
3191                 .DW DPL,AT, ONEP, ZBRAN,BN1, ONE,DPL,PSTOR      ; Увеличить DPL на единицу, если там не −1
3192 BN1:            .DW FROMR, BRAN,BN
3193 MMO:            .DW FROMR, EXIT

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

: >NUMBER ( ud1 c-addr1 u1 -- ud2 c-addr2 u2 ) \ 94
\ ud2 - результат преобразования символов строки, заданной c-addr1 u1,
\ в цифры, используя число в BASE, и добавлением каждой к ud1 после
\ умножения ud1 на число в BASE. Преобразование продолжается слева
\ направо до первого непреобразуемого символа, включая символы "+" и "-",
\ или до полного преобразования строки.
\ c-addr2 - адрес первого непреобразумого символа или первого символа
\ за концом строки, если строка была полностью преобразована.
\ u2 - число непреобразованных символов в строке.
\ Неоднозначная ситуация возникает, если ud2 переполняется во время
\ преобразования.
  BEGIN
    DUP
  WHILE
    >R
    DUP >R
    C@ BASE @ DIGIT 0=     \ ud n flag
    IF R> R> EXIT THEN     \ ud n  ( ud = udh udl )
    SWAP BASE @ UM* DROP   \ udl n udh*base
    ROT BASE @ UM* D+      \ (n udh*base)+(udl*baseD)
    R> CHAR+ R> 1-
  REPEAT
;

Советская реализация[править]

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

CONVERT   WD1,A1,->WD2,A2 ПРЕОБРАЗОВАТЬ WD1 И ЛИТЕРЫ            39
          ОТ А1+1 В WD2 И А2 - АДРЕС 1-ОЙ НЕ ЦИФРЫ

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

: CONVERT ( WD1,AI->WD2,A2)
 BEGIN 1+ DUP >R C@ BASE @ DIGIT WHILE
    SWAP BASE @ UM* DROP ROT BASE @ UM* D+
    DPL @ 1+ IF DPL 1+! THEN R> REPEAT R> ;

Ссылки[править]


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


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