Well, the following program #lang racket
(for ((log-length (in-range 23))) (let ((length (expt 2 log-length))) (printf "Applying append to list of ~a singletons~%" length) (time (apply append (for/list ((i (in-range length))) (list i)))))) Runs fine for me---the final stage reports Applying append to list of 4194304 singletons cpu time: 3270 real time: 3276 gc time: 2739 Going to 2^24 takes at least 1.1 GB of memory on my machine, and I was forced to kill the process due to swapping (I have several other active processes running). So, I guess the answer to my question is: "there is no limit on apply that takes effect before basic memory limits". Hopefully others will find this useful as well. Will On Aug 24, 2010, at 12:36 PM, Robby Findler wrote: > Try it out and see. I believe that the below is considered a common > idiom and that Matthew has probably done some work to make it work > well, but the contribution of a stress test is always welcome. > > Robby > > On Tue, Aug 24, 2010 at 12:31 PM, Will M. Farr <wmf...@gmail.com> wrote: >> Hello all, >> >> I recently encountered some library code of the form >> >> (apply append list-of-lists) >> >> where list-of-lists could be essentially arbitrarily long (i.e. >> list-of-lists came from clients of the library, and therefore could be >> anything). I didn't try to break it, but it made me a little nervous---I >> know that other Schemes have limits on the number of arguments that can come >> through apply. In practice, should I be worried about using apply on, say, >> 1M-element argument lists? >> >> Thanks, >> Will >> _________________________________________________ >> For list-related administrative tasks: >> http://lists.racket-lang.org/listinfo/users >> _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users