Subject: Re: invert-string revisited From: Erik Naggum <erik@naggum.net> Date: Fri, 31 May 2002 16:11:06 GMT Newsgroups: comp.lang.lisp Message-ID: <3231850263906024@naggum.net> * Adam Warner | So it appears I've come up with a decent (and ridiculously simple) | algorithm for preserving original symbol case when converting symbols to | strings. Another decent and ridiculously simple way is to use the compiler. Timing interpreted code is generally considered quite silly. Before compilation of any function: (st1) ; cpu time (non-gc) 3,730 msec user, 40 msec system ; cpu time (gc) 400 msec user, 20 msec system ; cpu time (total) 4,130 msec user, 60 msec system ; real time 4,689 msec ; space allocation: ; 2,230,144 cons cells, 14,594,640 other bytes, 0 static bytes => nil (st2) ; cpu time (non-gc) 1,150 msec user, 0 msec system ; cpu time (gc) 120 msec user, 0 msec system ; cpu time (total) 1,270 msec user, 0 msec system ; real time 1,268 msec ; space allocation: ; 460,136 cons cells, 12,720,160 other bytes, 0 static bytes => nil After compilation of all functions: (st1) ; cpu time (non-gc) 20 msec user, 0 msec system ; cpu time (gc) 0 msec user, 0 msec system ; cpu time (total) 20 msec user, 0 msec system ; real time 19 msec ; space allocation: ; 0 cons cells, 240,000 other bytes, 0 static bytes => nil (st2) ; cpu time (non-gc) 30 msec user, 0 msec system ; cpu time (gc) 0 msec user, 0 msec system ; cpu time (total) 30 msec user, 0 msec system ; real time 39 msec ; space allocation: ; 0 cons cells, 720,000 other bytes, 0 static bytes => nil Test run on a 600 MHz Intel PIII with enough RAM and Allegro CL 6.2.beta. I am more impressed with the interpreted speed than anything else... Just for kicks, I ran the same tests with CMUCL 3.0.12 18d+ build 3350 (are these guys Microsoft employees or what?. Before compilation: * (st1) Compiling LAMBDA NIL: Compiling Top-Level Form: Evaluation took: 2.98 seconds of real time 2.87 seconds of user run time 0.01 seconds of system run time [Run times include 0.19 seconds GC run time] 447 page faults and 8699088 bytes consed. NIL * (st2) Compiling LAMBDA NIL: Compiling Top-Level Form: Evaluation took: 0.37 seconds of real time 0.37 seconds of user run time 0.0 seconds of system run time [Run times include 0.04 seconds GC run time] 0 page faults and 1351384 bytes consed. NIL After compilation: * (st1) Evaluation took: 0.0 seconds of real time 0.0 seconds of user run time 0.0 seconds of system run time 0 page faults and 155112 bytes consed. NIL * (st2) Evaluation took: 0.02 seconds of real time 0.02 seconds of user run time 0.0 seconds of system run time 0 page faults and 319488 bytes consed. NIL Please note that space is sometimes worth optimizing for. One simple test I could have done, with two additional states, is to test the character following a character with case to see if it is in the same case, to return the string unchanged if so. -- In a fight against something, the fight has value, victory has none. In a fight for something, the fight is a loss, victory merely relief. 70 percent of American adults do not understand the scientific process.