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

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


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


== CONVERT в стандарте ANS Forth ==
== CONVERT в стандарте ANS Forth ==
Строка 30: Строка 29:


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


=== CONVERT в предыдущем стандарте Forth-83 (англ.) ===
=== CONVERT в предыдущем стандарте Forth-83 (англ.) ===
Строка 56: Строка 57:


== Реализация ==
== Реализация ==
<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>
=== Советская реализация ===
Описание и определение слова CONVERT в ядре ФОРТ-ЕС:
Описание и определение слова CONVERT в ядре ФОРТ-ЕС:
<PRE>
<PRE>
Строка 71: Строка 113:


== Ссылки ==
== Ссылки ==
* {{Исходник|CONVERT|CONVERT}}
* {{Исходник|UCONVERT|UCONVERT}}
* См. слова [[DIGIT]], [[BASE]] и [[NUMBER]]
* См. слова [[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://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 ''(англ.)''
Строка 82: Строка 124:
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Адаптированные слова]]
[[Категория:Фортовские слова]]
[[Категория:Архаичные слова]]

Текущая версия от 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> ;

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


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


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