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



On Mon, 8 Apr 2019 at 12:41, Aaron Hill <lilyp...@hillvisions.com> wrote:

> On 2019-04-07 6:01 pm, Andrew Bernard wrote:
> > I am somewhat concerned that there is a misunderstanding you have about
> > Scheme. Scheme procedures are call-by-value. This means the arguments
> > are
> > evaluated and the value then passed to the procedure. The value of the
> > parameter in the calling environment cannot be changed. This is how C
> > and
> > Scheme and many other languages work. [In C you can pass a pointer to
> > alter
> > a variable outside the function. but there is no such thing in Scheme -
> > for
> > good reasons.] It's not call-by-reference.
>
> The way I understand things, that's not entirely true.  Whether a Scheme
> interpreter/compiler passes by value or reference is an implementation
> detail.  Passing by reference is a convenient optimization to avoid
> unnecessary copies and garbage; and near as I can tell this is very
> commonly used across many environments.  As such, procedures can have
> side effects where the objects that are passed to such procedures may be
> modified.  Consider the 1+last! procedure I showed that is not a macro
> itself, but it still has the side effect of altering the list.
>
>
>
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to