A.2.3 Variables d’entrada i l’Scheme

El format d’entrada inclou la noció de variables: a l’exemple següent, s’assigna una expressió musical a una variable amb el nom de traLaLa.

traLaLa = { c'4 d'4 }

També hi ha una forma d’àmbit: a l’exemple següent, el bloc \layout també conté una variable traLaLa, que és independent de la \traLaLa externa.

traLaLa = { c'4 d'4 }
\layout { traLaLa = 1.0 }

En efecte, cada fitxer d’entrada constitueix un àmbit, i cada bloc \header, \midi i \layout son àmbits niuats dins de l’àmbit de nivell superior.

Tant les variables com els àmbits estan implementats al sistema de mòduls del Guile. A cada àmbit s’adjunta un mòdul anònim de l’Scheme. Una assignació de la forma:

traLaLa = { c'4 d'4 }

es converteix internament en una definició de l’Scheme:

(define traLaLa Valor Scheme de `')

Això significa que les variables del LilyPond i les variables de l’Scheme es poden barregar amb llibertat. A l’excemple següent, s’emmagatzema un fragment de música a la variable traLaLa, i es duplica usant l’Scheme. El resultat s’importa dins d’un bloc \score per mitjà d’una segona variable twice:

traLaLa = { c'4 d'4 }

#(define newLa (map ly:music-deep-copy
  (list traLaLa traLaLa)))
#(define twice
  (make-sequential-music newLa))

\twice
[image of music]

En realitat, això és un exemple força interessant. L’assignació sols té lloc després que l’analitzador sintàctic s’ha assegurat que no segueix res semblan a \addlyrics, de manera que cal comprovar el que ve a continuació. Llegeix el símbol # i l’expressió de l’Scheme següent sense avaluar-la, de forma que pot procedir a l’assignació, i posteriorment executar el codi de l’Scheme sense problema.


Extender LilyPond v2.25.27 (development-branch).