Thanks, Anton. I thought of something like that myself, not as slick:
(define (my-apply-append lolist) (let loop ([lolist lolist] [accum empty]) (if (empty? lolist) accum (loop (rest lolist) (append (first lolist) accum)))))
And my program's been running now for 5.5 hrs. I haven't been able to compile my program, so it's gsi. I'd send a bug report if I could get the latest beta working.
Oh, the humanity. Perhaps someone should refer the sudoku people to: http://www.ccs.neu.edu/home/will/Ephemera/richterFAQ.html
Someone did, in fact! You weren't one of the CS profs I referred to, but remember the last argument we had about Shriram's book, about free & bound variables? Shriram fixed his book exactly as I recommended.