A.2.4 Importación de Scheme dentro de LilyPond
El ejemplo anterior muestra cómo ‘exportar’ expresiones musicales
desde la entrada al intérprete de Scheme. Lo contrario también es
posible. Colocándolo después de $
, un valor de Scheme se
interpreta como si hubiera sido introducido en la sintaxis de
LilyPond. En lugar de definir \twice
, el ejemplo anterior
podría también haberse escrito como
… $(make-sequential-music newLa)
Podemos utilizar $
con una expresión de Scheme en cualquier
lugar en el que usaríamos \nombre
después de haber
asignado la expresión de Scheme a una variable nombre. Esta
sustitución se produce dentro del ‘analizador léxico’, de manera que
LilyPond no llega a darse cuenta de la diferencia.
Sin embargo, existe un inconveniente, el de la medida del tiempo. Si
hubiésemos estado usando $
en vez de #
para definir
newLa
en el ejemplo anterior, la siguiente definición de Scheme
habría fracasado porque traLaLa
no habría sido definida aún.
Para ver una explicación de este problema de momento temporal, véase
Sintaxis del Scheme de LilyPond.
Un conveniente aspecto posterior pueden ser los operadores de
‘división de listas’ $@
y #@
para la inserción de
los elementos de una lista dentro del contexto circundante.
Utilizándolos, la última parte del ejemplo se podría haber escrito
como
… { #@newLa }
Aquí, cada elemento de la lista que está almacenado en newLa
se
toma en secuencia y se inserta en la lista, como si hubiésemos escrito
{ #(first newLa) #(second newLa) }
Ahora bien, en todas esas formas, el código de Scheme se evalúa en el momento en que el código de entrada aún se está procesando, ya sea en el analizador léxico o en el analizador sintáctico. Si necesitamos que se ejecute en un momento posterior, debemos consultar Funciones de Scheme vacías, o almacenarlo dentro de un procedimiento:
#(define (nopc) (ly:set-option 'point-and-click #f)) … #(nopc) { c'4 }
Advertencias y problemas conocidos
No es posible mezclar variables de Scheme y de LilyPond con la opción ‘--safe’.
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.