B.2.3 Funciones de Scheme vacías
En ocasiones, un procedimiento se ejecuta con el objeto de llevar a
cabo alguna acción más que para devolver un valor. Algunos lenguajes
de programación (como C y Scheme) usan las funciones para los dos
conceptos y se limitan a descartar el valor devuelto (usualmente
haciendo que cualquier expresión pueda actuar como instrucción,
ignorando el resultado devuelto). Esto puede parecer inteligente pero
es propenso a errores: casi todos los compiladores de C de hoy en día
emiten advertencias cuando se descarta una expresión no vacía. Para
muchas funciones que ejecutan una acción, los estándares de Scheme
declaran que el valor de retorno sea no especificado. Guile, el
intérprete de Scheme de LilyPond, tiene un valor único
*unspecified*
que en tales casos devuelve de forma usual (como
cuando se usa directamente set!
sobre una variable), pero
desgraciadamente no de forma consistente.
Definir una función de LilyPond con define-void-function
asegura que se devuelve este valor especial, el único valor que
satisface el predicado void?
.
noApuntarYPulsar = #(define-void-function (parser location) () (ly:set-option 'point-and-click #f)) … \noApuntarYPulsar % desactivar la función de apuntar y pulsar
Si queremos evaluar una expresión sólo por su efecto colateral y no
queremos que se interprete ningún valor que pueda devolver, podemos
hacerlo anteponiendo el prefijo \void
:
\void #(hashq-set! some-table some-key some-value)
De esta forma podemos asegurar que LilyPond no asignará ningún
significado al valor devuelto, independientemente de dónde lo
encuentre. También funciona para funciones musicales como
\displayMusic
.
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.