On Tue, 9 Apr 2019 at 10:29, David Kastrup <d...@gnu.org> wrote:

> Gianmaria Lari <gianmarial...@gmail.com> writes:
>
> > Ciao Harm, Andrew, Aaron and David,
> >
> > this is what I have been able to do adapting Harm code:
> >
> > \version "2.21.0"
> > foo =
> > #(let ((x '(1)))
> >   (define-scheme-function (arg)(symbol?)
> >     (case arg
> >       ((incNumber) (set! x (append (drop-right x 1) (list (1+ (last
> x))))))
> >       ((unindent) (drop-right! x 1))
> >       ((indent) (append! x '(1)))
> >       ((reset) (set! x '(1))))
> >     (object->string x)))
>
> Harm did not accidentally write (let ((x (cons 1 0))) ... here.  '(1) is
> a _constant_ list where you guarantee to the Scheme interpreter that you
> will not modify any cons cell of the list and it can place it in
> read-only memory.  If now the next call is 'indent , this guarantee is
> violated, possibly leading to crashes and inconsistencies in shared
> constants.  Then you use append! and drop-right! for list manipulation
> and rely on their side effects to do what you want.  Those side effects
> are optional.  This is rather bad Scheme code.  What are the goals you
> intend to achieve with those changes?
>

The reason why I changed Harm code was because it was not clear to me the
use of cons. Furthermore mine looked simpler :)

Thank you David for pointing me out the problem. I will read better his
code and the documentation about cons.

Ciao, g.
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to