[ << Interfaces pour programmeurs ] | [Top][Contents][Index] | [ Interfaces LilyPond Scheme >> ] |
[ < Utilisation de fonctions Scheme ] | [ Up : Fonctions Scheme ] | [ Fonctions musicales > ] |
2.2.3 Fonctions Scheme fantômes
Il arrive qu’une procédure soit exécutée pour réaliser une action, non
pour renvoyer une valeur. Certains langages de programmation, tels le C
et Scheme, utilisent des fonctions dans les deux cas et se débarrassent
tout bonnement de la valeur renvoyée ; en règle générale, il suffit que
l’expression fasse office de déclaration, et d’ignorer le résultat.
C’est futé, mais pas sans risque d’erreur : la plupart des compilateurs
C actuels déclenchent un avertissement si l’on se débarrasse de
certaines expressions non-void. Pour de nombreuses fonctions
réalisant une action, les standards Scheme déclarent que la valeur de
retour est indéfinie. L’interpréteur Guile qu’utilise le Scheme de
LilyPond dispose d’une valeur unique *unspecified*
qu’il retourne
alors, en règle générale – notamment lorsqu’on utilise set!
directement sur une variable – mais malheureusement pas toujours.
Une fonction LilyPond définie à l’aide de la clause
define-void-function
vous apporte l’assurance que c’est cette
valeur spéciale – la seule valeur qui satisfasse au prédicat
void?
– qui sera retournée.
noPointAndClick = #(define-void-function () () (ly:set-option 'point-and-click #f)) … \noPointAndClick % desactive le "pointer-cliquer"
L’utilisation d’un préfixe \void
permet ainsi d’évaluer une
expression pour ses effets annexes sans interprétation d’une quelconque
valeur de retour :
\void #(hashq-set! une-table une-clé une-valeur)
Vous serez alors assuré que LilyPond ne tentera pas d’affecter un sens à
la valeur de retour, à quelque endroit qu’elle ressorte. Ceci est aussi
opérationnel dans le cadre de fonctions musicales telles que
\displayMusic
.
[ << Interfaces pour programmeurs ] | [Top][Contents][Index] | [ Interfaces LilyPond Scheme >> ] |
[ < Utilisation de fonctions Scheme ] | [ Up : Fonctions Scheme ] | [ Fonctions musicales > ] |