Редактирование: UCONVERT

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''UCONVERT''' — фортовское слово [[Каллисто]]. Преобразовать последовательность цифр в целое, с учётом [[BASE]].
'''CONVERT''' — стандартное слово [[Каллисто]].
UCONVERT      ( u a −− u1 a1 )                    Преобразовать u и литеры от a+1 в u1 и a1 −− адрес первой не цифры.
 
== Ввод слова UCONVERT ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 2|{{Серая клавиша|2}}]]
 
== CONVERT в стандарте ANS Forth ==
<pre>
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 ;
</pre>
 
== История ==
В стандарте Форта 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.
 
== Реализация ==
<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 в ядре ФОРТ-ЕС:
<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>


== Ссылки ==
== Ссылки ==
* {{Исходник|UCONVERT|UCONVERT}}
* [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 комментарии к нему] ''(англ.)''
* См. слова [[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] ''(англ.)''
 


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Адаптированные слова]]
[[Категория:Фортовские слова]]
[[Категория:Архаичные слова]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)