B.2.2 Uso de las funciones de Scheme

Las funciones de Scheme se pueden llamar casi desde cualquier lugar en que puede escribirse una expresión de Scheme que comience con la almohadilla #. Llamamos a una función de Scheme escribiendo su nombre precedido de la barra invertida \, y seguido por sus argumentos. Una vez que un argumento opcional no corresponde a ningún argumento, LilyPond se salta este argumento y todos los que le siguen, sustituyéndolos por su valor por omisión especificado, y ‘recupera’ el argumento que no correspondía al lugar del siguiente argumento obligatorio. Dado que el argumento recuperado necesita ir a algún lugar, los argumentos opcionales no se consideran realmente opcionales a no ser que vayan seguidos de un argumento obligatorio.

Existe una excepción: si escribimos \default en el lugar de un argumento opcional, este argumento y todos los argumentos opcionales que le siguen se saltan y se sustituyen por sus valores predeterminados. Esto funciona incluso si no sigue ningún argumento obligatorio porque \default no necesita recuperarse. Las instrucciones mark y key hacen uso de este truco para ofrecer su comportamiento predeterminado cuando van seguidas solamente por \default.

Aparte de los lugares en que se requiere un valor de Scheme hay ciertos sitios en que se aceptan expresiones de almohadilla # y se evalúan por sus efectos secundarios, pero por lo demás se ignoran. Son, mayormente, los lugares en que también sería aceptable colocar una asignación.

Dado que no es buena idea devolver valores que puedan malinterpretarse en algún contexto, debería usar funciones de Scheme normales solo para los casos en que siempre se devuelve un valor útil, y usar funciones de Scheme vacías (see Funciones de Scheme vacías) en caso contrario.

Por conveniencia, las funciones de Scheme también se pueden llamar directamente desde Scheme, puenteando al analizador sintáctico de LilyPond. Su nombre puede utilizarse como el nombre de una función corriente. La comprobación de tipo de los argumentos y el salto de los argumentos opcionales tiene lugar de la misma forma que cuando se llama desde dentro de LilyPond, tomando el valor de Scheme *unspecified* el papel de la palabra reservada \default para saltar explícitamente argumentos opcionales.


Extender LilyPond v2.25.22 (development-branch).