UCONVERT
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> ;
Ссылки[править]
- Исходный текст слова UCONVERT в Каллисто Классик 1.0
- См. слова DIGIT, BASE и NUMBER
- Слово CONVERT и комментарий к нему в стандарте ANS Forth (англ.)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- I/O and You в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |