[ << Tutorial de l’Scheme ] | [Top][Contents][Index] | [ Interfícies per a programadors >> ] |
[ < Variables del LilyPond ] | [ Up: Scheme dins del LilyPond ] | [ Importació de l’Scheme dins del LilyPond > ] |
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]](../c8/lily-79e9e275.png)
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.
[ << Tutorial de l’Scheme ] | [Top][Contents][Index] | [ Interfícies per a programadors >> ] |
[ < Variables del LilyPond ] | [ Up: Scheme dins del LilyPond ] | [ Importació de l’Scheme dins del LilyPond > ] |