[ << Tutorial de Scheme ] | [Top][Contents][Index] | [ Interfaces para programadores >> ] |
[ < Variables de LilyPond ] | [ Up : Scheme dentro de LilyPond ] | [ Importación de Scheme dentro de LilyPond > ] |
A.2.3 Variables de entrada y Scheme
El formato de entrada contempla la noción de variables: en el
siguiente ejemplo, se asigna una expresión musical a una variable
con el nombre traLaLa
.
traLaLa = { c'4 d'4 }
También hay una forma de ámbito: en el ejemplo siguiente, el
bloque \layout
también contiene una variable
traLaLa
, que es independiente de la \traLaLa
externa.
traLaLa = { c'4 d'4 } \layout { traLaLa = 1.0 }
En efecto, cada archivo de entrada constituye un ámbito, y cada
bloque \header
, \midi
y \layout
son ámbitos
anidados dentro del ámbito de nivel superior.
Tanto las variables como los ámbitos están implementados en el sistema de módulos de Guile. A cada ámbito se adjunta un módulo anónimo de Scheme. Una asignación de la forma:
traLaLa = { c'4 d'4 }
se convierte internamente en una definición de Scheme:
(define traLaLa Valor Scheme de `…
')
Esto significa que las variables de LilyPond y las variables de
Scheme se pueden mezclar con libertad. En el ejemplo siguiente,
se almacena un fragmento de música en la variable traLaLa
,
y se duplica usando Scheme. El resultado se importa dentro de un
bloque \score
por medio de una segunda 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 realidad, éste es un ejemplo bastante interesante. La
asignación solo tiene lugar después de que el analizador
sintáctico se ha asegurado de que no sigue nada parecido a
\addlyrics
, de manera que necesita comprobar lo que viene a
continuación. Lee el símbolo #
y la expresión de Scheme
siguiente sin evaluarla, de forma que puede proceder a la
asignación, y posteriormente ejecutar el código de Scheme
sin problema.
[ << Tutorial de Scheme ] | [Top][Contents][Index] | [ Interfaces para programadores >> ] |
[ < Variables de LilyPond ] | [ Up : Scheme dentro de LilyPond ] | [ Importación de Scheme dentro de LilyPond > ] |