[ << Interfaces pour programmeurs ] | [Racine][Table des matières][Index] | [ Interfaces LilyPond Scheme >> ] |
[ < Utilisation de fonctions Scheme ] | [Plus haut: 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 ] | [Racine][Table des matières][Index] | [ Interfaces LilyPond Scheme >> ] |
[ < Utilisation de fonctions Scheme ] | [Plus haut: Fonctions Scheme ] | [ Fonctions musicales > ] |