Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.forth    |    Forth programmers eat a lot of Bratwurst    |    117,927 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 116,911 of 117,927    |
|    dxf to Hans Bezemer    |
|    Re: Parsing timestamps?    |
|    30 Oct 24 11:31:10    |
      From: dxforth@gmail.com              On 30/10/2024 12:45 am, Hans Bezemer wrote:       > On 29-10-2024 10:25, dxf wrote:       >> On 29/10/2024 4:07 am, Hans Bezemer wrote:       >>> ...       >>> I have put the complication elsewhere. If we assume we're working in       decimal, you don't even need >NUMBER:       >>>       >>> char 0 negate +constant 0-       >>>       >>> : /int ( a1 n1 -- a2 n2 n3)       >>> 0 >r 1 >r 1- chars over +       >>> begin       >>> over 1- over <       >>> while       >>> dup c@ is-digit       >>> while       >>> dup c@ 0- r> tuck * r> + >r 10 * >r 1-       >>> repeat over - rdrop r> -rot       >>> ;       >>> ...       >>       >> So that's how to convert a numeric string from the other end.       >> Nice! Easier than I imagined it would be.       >       > TORS is the multiplier, 2ORS is the accumulator. Normally, the multiplier is       multiplied after each run with BASE @ - but that makes little sense when       IS-DIGIT isn't properly adjusted. Would be a nice exercise, though.              Something like this...              \ \CHAR ( a u -- a u-1 c )       \ >DIGIT ( c base -- u -1 | c 0 )              : /INT ( a1 n1 -- a2 n2 u )        0 >r 1 begin >r dup while        \char base @ >digit while        r> tuck * r> + >r base @ *        repeat drop ( -1 /string) then rdrop r> ;              OTOH the necessity to convert R-L is probably rare.              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca