To the contrary, Scheme's prefix notation reads quite well, particularly if you use indentation well. But that's just my opinion.<p>Several of the statements in this article about Scheme are, however, objectively wrong.<p>-Scheme isn't functional. It makes no effort to control side-effects, and a lot of Scheme is heavily stateful. In fact, the very Scheme example you wrote isn't functional at all!<p>-Scheme isn't uncomfortable for OO. Multiple OO frameworks have been written in Scheme (most of them based upon CLOS), and many of them are very comfortable and quite excellent. If you don't like multiple-dispatch functions, it's also possible to implement smalltalk-style object-message syntax (and indeed, people have done so).<p>In fact, if you look into the history of Scheme, it was orginally written by Sussman and Steele to help them understand the Actor Model, which is quite similar to OO: a program is modeled as many stateful actors, which can only communicate through messages.<p>Finally, the "confusing" Scheme code in this article is not very well written. If you split the definitions like so, it becomes much more readable (also, vector-map! is already defined in many schemes, so you don't even have to evaluate the top part):<p><pre><code> (define (vector-map! f v)
(do ((i 0 (+ i 1)))
((= i 0) v)
(vector-set! v i (f (vector-ref v i)))))
(define (make-matrix rows columns)
(vector-map!
(lambda (a) (make-vector columns))
(make-vector rows)))
</code></pre>
Again, there are several common extensions (in various SRFIs) that would make this even cleaner. In the upcoming R7RS-large (the Red standard, which has these functions, has just been released), I would merely need to import one library, and vector-map! would be defined for me, as is already true in many implementations.