Hi Aaron,
I beg to differ. Here plain and clear from the start of the R5RS Scheme specification is the following:
Arguments to Scheme procedures are always passed by
value, which means that the actual argument expressions
are evaluated before the procedure gains control, whether
the procedure needs the result of the evaluation or not.
I am unable to deduce how the procedure evaluation can therefore be an implementation choice. Call by reference would alter the semantics of Scheme entirely. One of the main strengths of Scheme is that it supports lexical scoping so procedures can't alter variables outside the local scope, unless you resort to using global variables at the top level, but hopefully people no longer program like that.
I've never heard of any Scheme system that uses call by reference, and I would request that you provide evidence for that. If you can my Scheme world will be turned upside down.
I'll do another email about set-car! and list-set! a bit later.
Andrew