[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: alist problem
From: |
David Sumbler |
Subject: |
Re: alist problem |
Date: |
Wed, 05 Dec 2018 16:55:53 +0000 |
-----Original Message-----
From: David Kastrup <address@hidden>
To: David Sumbler <address@hidden>
CC: address@hidden
Subject: Re: alist problem
Date: Wed, 05 Dec 2018 15:37:21 +0100
David Sumbler <address@hidden> writes:
> IR 2.19.82 shows the following amongst the settings for TrillSpanner:
>
> bound-details (list):
> '((left (text #<procedure musicglyph-markup (layout props glyph-
> name)>
> "scripts.trill")
> (Y . 0)
> (stencil-offset -0.5 . -1)
> (padding . 0.5)
> (attach-dir . 0))
> (left-broken (end-on-note . #t))
> (right (Y . 0)))
>
> If I write
>
> \override TrillSpanner.bound-details.left-broken = #'(end-on-note .
> #t)
>
> Lilypond accepts it, suggesting that I am using the correct syntax.
You aren't. You are putting a pair where an association list should
be. This would need to be
\override TrillSpanner.bound-details.left-broken = #'((end-on-note .
#t))
to have the same effect.
> But if I write
>
> \override TrillSpanner.bound-details.right = #'(Y . 0)
>
> Lilypond produces:
>
> ERROR: Wrong type argument in position 2 (expecting association
> list):
> (Y . 0)
>
> I can't figure out why this is. Can somebody please explain it to
> me,
> and show me the correct syntax?
(Y . 0) is a pair, not an association list. To get the same effect,
you'd need to write
\override TrillSpanner.bound-details.right = #'((Y . 0))
or alternatively (assuming you want other right bound-details to stay)
\override TrillSpanner.bound-details.right.Y = 0
> (The reason for doing this was to try to shorten the extent of a
> trill
> spanner. This may not be the correct parameter to change, which is
> why I was trying different values; but even if that is true, I would
> still like to know why my line produces an error.)
Because you cannot add or delete parens at will. Note that
(right (Y . 0)) is a shorthand for (right . ((Y . 0))) . It is easy to
overlook this when looking at a pair (like the key-value pair of an
association list) where the cdr is a list in itself. In that case, the
Scheme printer elides the dot and one level of parens around the cdr,
simply because a list is indistinguishable from a dotted list where the
cdr is a list itself.
------------------------
Now that you have explained it I feel that I should have been able to
work that out for myself. But I'm afraid I didn't.
So thank you very much for sorting it out for me.
David