parsetoken



Am 25 May 2007 um 18:15 hat Stavros Macrakis geschrieben:

Hello Stavros,

I was off for some days, so here my late answer.


> Speaking of misleading names, contrib/stringproc has a routine called parsetoken which reads an 
> integer or float from a string (using the Lisp reader, as it happens), e.g.

Maybe 'parsenumber? would be better, maybe 'parsetoken? is appropriate, because it 
tokenizes the 2 from 2 / 3, just as a warning. 

>  parsetoken("2.3") => 2.3 
>  parsetoken("2/3") => 2/3 (I just fixed this case; previously it returned a CL rational)

thanks for fixing this. Maybe I have overseen this, because e.g. 
2*parsetoken("1/3") => 2/3
which is correct, 
but of course not a Maxima rational.

> Useful functionality. But, as its documentation says, it only works on numbers, not tokens in 
> general: 
> 
>  parsetoken("foo") => false
>  parsetoken("*") => false

which is intended

> And not all Maxima numbers:
> 
>  parsetoken("2.3b0") => false

I have just committed a new version, which can parse bigfloats using the Maxima-reader 
(mread). Integers, floats and rationals are still parsed first only by the Lisp-reader (read), 
so that the speed advantage still remains.

(%i1) s: "12 1.2 .12e+3 .12b-1 1/2 sqrt(2) %e foo"$
(%i2) ss: split(s);
(%o2) 			  [12, 1.2, .12e+3, .12b-1, 1/2, sqrt(2), %e, foo]
(%i3) map(parsetoken,ss);
						   1
(%o3) 			  [12, 1.2, 120.0, 1.2b-2, -, false, false, false]
						   2


Volker