rainbow grows its stack as needed, and will eventually run out of memory with a non-tail-recursive copylist and a big enough list. Scheme seems to be able to optimise "tail recursion modulo cons" - I've tried copylist with tens of millions of elements and scheme doesn't break; rainbow does.