Werner LEMBERG <w...@gnu.org> 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
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to