UCONVERT: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показаны 22 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
''' | '''UCONVERT''' — фортовское слово [[Каллисто]]. Преобразовать последовательность цифр в целое, с учётом [[BASE]]. | ||
UCONVERT ( u a −− u1 a1 ) Преобразовать u и литеры от a+1 в u1 и a1 −− адрес первой не цифры. | |||
== Ввод слова | == Ввод слова UCONVERT == | ||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 2|{{Серая клавиша|2}}]] | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 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 ) | ||
Строка 24: | Строка 26: | ||
: CONVERT CHAR+ 65535 >NUMBER DROP ; | : CONVERT CHAR+ 65535 >NUMBER DROP ; | ||
</pre> | |||
== CONVERT в предыдущем стандарте Forth-83 (англ.) == | == История == | ||
В стандарте Форта 1994 года слово CONVERT было определено, как устаревшее. Его нет в черновике стандарта 200x года. Эволюция Форта привела к победе слова >NUMBER — в котором явно указана максимальная длина строки для преобразования. | |||
Каллистянское слово 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 | ||
Строка 34: | Строка 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 | ||
Строка 48: | Строка 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> | |||
=== Советская реализация === | |||
Описание и определение слова 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}} | |||
* См. слова [[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 ''(англ.)'' | ||
* [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] ''(англ.)'' | |||
Строка 59: | Строка 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> ;
Ссылки[править]
- Исходный текст слова UCONVERT в Каллисто Классик 1.0
- См. слова DIGIT, BASE и NUMBER
- Слово CONVERT и комментарий к нему в стандарте ANS Forth (англ.)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- I/O and You в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |