[ << Interfícies per a programadors ] | [Top][Contents][Index] | [ Interfícies de l’Scheme del LilyPond >> ] |
[ < Ús de les funcions de l’Scheme ] | [ Up: Funcions de l’Scheme ] | [ Funcions musicals > ] |
B.2.3 Funcions de l’Scheme buides
En ocasions, un procediment s’executa amb l’objectiu de fer alguna
acció més per retornar un valor. Alguns llenguatges de
programació (com a C i l’Scheme) usen les funcions per als dos
conceptes i es limiten a descartar el valor retornat (usualment
fent que qualsevol expressió pugui actuar com a instrucció,
ignorant el resultat retornat). Això pot semblar intel·ligent
però és propens a errors: gairebé tots els compiladors de C d’avui
en dia emeten advertiments quan es descarta una expressió no
buida. Per a moltes funcions que executen una acció, els
estàndards de l’Scheme declaren que el valor de retorn sigui no
especificat. Guile, l’intèrpret de l’Scheme al LilyPond, té un
valor únic *unspecified*
que en tals casos retorna de forma
usual (com quan es fa servir directament set!
sobre una
variable), però desgraciadament no de forma consistent.
Definir una funció del LilyPond amb define-void-function
assegura que es retorna aquest valor especial, l’únic valor que
satisfà el predicat void?
.
noApuntarYPulsar = #(define-void-function () () (ly:set-option 'point-and-click #f)) … \noApuntarYPulsar % desactivar la funció d'apuntar i clicar
Si volem avaluar una expressió sols pel seu efecte col·lateral i
no volem que s’interpreti cap valor que pugui retornar, podem
fer-lo anteposant el prefix \void
:
\void #(hashq-set! alguna-taula alguna-clau algun-valor)
D’aquesta forma podem assegurar que el LilyPond no assignarà cap
significat al valor retornat, independentment d’on el trobi.
També funciona per a funcions musicals com \displayMusic
.
[ << Interfícies per a programadors ] | [Top][Contents][Index] | [ Interfícies de l’Scheme del LilyPond >> ] |
[ < Ús de les funcions de l’Scheme ] | [ Up: Funcions de l’Scheme ] | [ Funcions musicals > ] |