2012/1/3 David Kastrup <d...@gnu.org>: > Janek Warchoł <janek.lilyp...@gmail.com> writes: > >> 2012/1/3 David Kastrup <d...@gnu.org>: > >>> LilyPond needs to get into a state where, say, half the >>> engravers are written and maintained in Scheme. And by "Scheme" I don't >>> mean "Scheme at the level Nicolas can barely handle" but "Scheme a >>> Fortran programmer would not have all too much of a problem >>> understanding". >> >> Umm, impossible? From my perspective, 'Scheme' and 'easy to >> understand' are mutually exclusive. Unless there are more comments >> than code - literally - but we don't do so. > > Well, as an example, take a look at > <URL:http://nicolas.sceaux.free.fr/prelude/prelude.html>
Hmm, excuse me while my brain melts ;) > Now take a look at > > \begin{lilypond} > ph = #(define-music-function (parser location p1 p2 p3 p4 p5) > (ly:pitch? ly:pitch? ly:pitch? ly:pitch? ly:pitch?) > #{ > \repeat unfold 2 { $p1 2 } | > \repeat unfold 2 { r16 $p2 8. ~ $p2 4 } | > \repeat unfold 2 { r8 $p3 16 $p4 $p5 $p3 $p4 $p5 } | > #}) > \parallelMusic #'(low middle high) > { > \ph c' e' g' c'' e'' > R1*7 | \skip 1*7 | R1*7 | > \ph a c' e' g' c'' > \voiceTwo | \change Staff = "down" \voiceOne | \oneVoice | > \ph d a d' fis' c'' > R1*21 | \skip 1*21 | R1*21 | > \ph c, c g bes e' > c,2~ c, | r16 c8. ~ c4 ~ c2 > | r8 f16 a c' f' c' a c' a f a f d f d | > c,2~ c, | r16 b,8. ~ b,4 ~ b,2 > | r8 g'16 b' d'' f'' d'' b' d'' b' g' b' d' f' e' d' | > c,1\fermata | c1 | <e' g' c''>1\fermata \bar "|." | > } > \score { > \new PianoStaff << > \new Staff = "up" { > << \high \\ \middle >> > } > \new Staff = "down" { > \clef bass > \low > } > >> > > \midi { > \context { > \Score > \with \settingsFrom { \tempo 4 = 80 } > } > } > > \layout { > \context { > \Score > \with \settingsFrom { \compressFullBarRests } > } > \context { > \Staff > \with \settingsFrom { \accidentalStyle modern } > } > } > } > \end{lilypond} > > \ph is a music function written in Scheme. Can you understand it? Yes, but i get lost on \parallellMusic :( > \settingsFrom is actually returning a Scheme expression for \with to > use. It makes things rather simpler than more complex, even though it > constitutes a Scheme expression. Um... i would really love to be able to type \layout { \compressFullBarRests \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 6 10) etc... } > Scheme is not hard. Programming is hard. And there is still far too > much repetitive programming required for stuff that could be handled > using shrinkwrapped tools (\settingsFrom is such a tool) if anybody had > bothered packaging them. Far too often if I think "Ok, task x has no > documented way of dealing with it. Let's see whether we can find an > undocumented API". And then I find about 10 files implementing their > own ad hoc API that will break in different ways if one has to change > the data structures at some point of time. I agree, this should not work like that. Janek _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel