Текущая версия |
Ваш текст |
Строка 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] ''(англ.)''
| |
| | |
|
| |
|
| {{нет иллюстраций}} | | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Адаптированные слова]]
| |
| [[Категория:Фортовские слова]]
| |
| [[Категория:Архаичные слова]]
| |