[ << Tutorial de Scheme ] | [Arriba][Índice general][Índice] | [ Interfaces para programadores >> ] |
[ < Variables de entrada y Scheme ] | [ Subir : Scheme dentro de LilyPond ] | [ Propiedades de los objetos > ] |
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’.
[ << Tutorial de Scheme ] | [Arriba][Índice general][Índice] | [ Interfaces para programadores >> ] |
[ < Variables de entrada y Scheme ] | [ Subir : Scheme dentro de LilyPond ] | [ Propiedades de los objetos > ] |