Werner LEMBERG <[email protected]> writes:
> I find the above much too dense. It introduces three different pseudo
> operators in one rush. While tightly related, it should be done step
> by step. So this is a criticism of the R6RS docs (being a standard to
> be read by Scheme experts), not LilyPond. However, a casual reader
> not so fluent in Scheme will tear one's hair if she gets confronted
> with your $@ form.
>
> Perhaps it's a bit redundant, but I think that it would help many
> readers if some Scheme basics are added to the documentation of $@
> *directly*, demonstrating the unquote-splicing mechanism in very basic
> examples.
Problem is that the Scheme tutorial has not really reached the level
when they get first mentioned where one can actually make a useful
example. I get back to them later.
It's one of those cases where I am stuck coming up with something
better. If I break down the example I listed before, here are a few
useful ways of applying it:
\score
{
\displayLilyMusic
{ $@(map!
(lambda (p d) #{ < $@p >$@d #})
; this $@ produces elements for a sequential music list via map!. Each
; element is constructed from p, a list of pitches making up a chord,
; and from d, which is a list first containing a duration followed by
; _optional_ articulations, so $@d actually can return several tokens of
; _different_ type.
;
; The following form constructs the list of pitch lists for use in p
(let loop
((c (map!
(lambda (i)
(let ((p (+ 15 (* 9 (quotient i 5)) (* i -2))))
(ly:make-pitch (quotient p 7) (remainder p 7) 0)))
(iota 38)))
(l '()))
(if (null? (cddddr c))
(let ((fin (cadr l)))
(reverse! l (list fin)))
(loop (cdr c) (cons (list-head c 5) l))))
; The following form constructs an (end-less) list of lists containing
; a duration and maybe articulations.
(apply
circular-list
(map!
(lambda (m) (cons (ly:music-property m 'duration)
(ly:music-property m 'articulations)))
(extract-typed-music
#{ s4.~ s~ s4~ s2~ s2 #}
'skip-event))))
<c' e' g' a' c''>1 \bar "|."
}
\midi { \tempo 4 = 220 }
\layout { }
}
That's a reasonably nice snippet (except that the output looks
horrendous). But not really at the level of the Scheme tutorial.
--
David Kastrup
_______________________________________________
lilypond-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-devel