Sujet : Re: Roman numerals , recognizer "0r".
De : dxforth (at) *nospam* gmail.com (dxf)
Groupes : comp.lang.forthDate : 09. Jun 2025, 04:42:51
Autres entêtes
Organisation : i2pn2 (i2pn.org)
Message-ID : <2ce249aa06ffa026b7ea087ed20c6d0612301dc6@i2pn2.org>
References : 1 2 3
User-Agent : Mozilla Thunderbird
On 9/06/2025 2:07 am, dxf wrote:
On 9/06/2025 12:41 am, LIT wrote:
0 VARIABLE FORMER
0 VARIABLE PRESENT
>
HERE 73 C, 86 C, 88 C, 76 C, 67 C, 68 C, 77 C, \ I V X L C D M
HERE 0 C, 1 C, 2 C, 10 C, 20 C, 100 C, 200 C,
...
Yep. Nothing better than FigForth :) How about ...
: CREATE 0 VARIABLE -2 ALLOT ;
Actually CREATE wasn't needed here...
VARIABLE FORMER
VARIABLE PRESENT
HERE 73 C, 86 C, 88 C, 76 C, 67 C, 68 C, 77 C, \ I V X L C D M
HERE 0 C, 1 C, 2 C, 10 C, 20 C, 100 C, 200 C,
CONSTANT ESYM CONSTANT SYM
: VAL ( ch -- u )
0 SWAP ESYM SYM DO
DUP I C@ =
IF DROP I 7 + C@ DUP 0= ABS SWAP 5 * + NIP 1 SWAP LEAVE THEN
LOOP
OVER IF NIP ELSE DROP THEN ;
: ROMAN>ARABIC ( addr count -- u )
0 -ROT 0 FORMER ! 0 PRESENT !
OVER + 1- DO
I C@ VAL DUP PRESENT !
DUP FORMER @ <
IF -
ELSE DUP FORMER ! +
THEN
-1 +LOOP ;
S" MCMLIX" ROMAN>ARABIC . 1959 ok