[M3devel] m3core: TextCat.m3: MultiCat
Rodney M. Bates
rodney.bates at wichita.edu
Fri Mar 9 23:11:18 CET 2007
It looks wrong to me too. But once messing with it, how about
treeing the concatenations, something like:
; PROCEDURE MultiCat ( READONLY x : ARRAY OF TEXT ) : TEXT
= VAR Num := NUMBER ( x )
; VAR Half : CARDINAL
; BEGIN (* MultiCat *)
IF Num <= 0
THEN
RETURN ""
ELSIF Num = 1
THEN
RETURN x [ 0 ]
ELSE
Half := Num DIV 2
; RETURN
Concat
( MultiCat ( SUBARRAY ( x , 0 , Half ) )
, MultiCat ( SUBARRAY ( x , Half , Num - Half ) )
)
END (* IF *)
END MultiCat
It would reduce heap space overhead, allocation time, Multicat
execution time, and maybe collection time (if that has a nonzero
constant factor) from linear to logarithmic. On the downside,
stack space would increase from constant to logarithmic, which
might hurt in case stack was very tight and heap was not.
dirk muysers wrote:
> ....
> result := NEW (T, a := x[i], b := result);
> ....
> What about the initialisation of a_len, b_len, and a_or_b_wide ??
> Shouldn't it rather be:
> ....
> result := Concat (x [i], result)
> ....
> This is almost certainly a bug.
>
> _________________________________________________________________
> Don't just search. Find. Check out the new MSN Search!
> http://search.msn.com/
>
> _______________________________________________
> M3devel mailing list
> M3devel at elegosoft.com
> https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3devel
>
--
-------------------------------------------------------------
Rodney M. Bates, retired assistant professor
Dept. of Computer Science, Wichita State University
Wichita, KS 67260-0083
316-978-3922
rodney.bates at wichita.edu
More information about the M3devel
mailing list