The beauty of scheme is its minimalism. It's problem is its minimalism. Try and count the common ways to express looping in scheme. Most curly-brace languages use for and while for loops, while scheme has explicit tail calls, named let, do macros, and continuations. This does tend to make scheme write-only for non-trivial programs, unless one finds this maxim enlightening: every sufficiently-commented scheme program contains an ML program in its comments.