B.2.2 Ús de les funcions de l’Scheme
Les funcions de l’Scheme es poden cridar gairebé des de qualsevol
lloc en el qual es pot escriure una expressió de l’Scheme que
comenci amb el coixinet #
. Cridem a una funció de
l’Scheme escrivint el seu nom precedit de la barra
invertida \
, i seguit pels seus arguments. Un cop que
un argument opcional no correspon amb cap argument, el LilyPond se
salta aquest argument i tots els que el segueixen, substituint-los
pel seu valor per defecte especificat, i ‘recupera’ l’argument
que no corresponia al lloc del següent argument obligatori. Atès
que l’argument recuperat cal anar a algun lloc, els argument
opcionals no es consideren realment opcionals a no ser que vagin
seguits d’un argument obligatori.
Hi existeix una excepció: si escrivim \default
enlloc d’un
argument opcional, aquest argument i tots els arguments opcionals
que el segueixen se salten i se substitueixen pels seus valors
predeterminats. Això funciona fins i tot si no segueix cap
argument obligatori perquè no cal que \default
es
recuperi. Les instruccionsmark
i key
fan ús
d’aquest ajustament per oferir el seu comportament predeterminat
quan van seguides sols per \default
.
A part dels llocs on es requereix un valor de l’Scheme hi ha certs
llocs en els quals s’accepten expressions de coixinet #
i
s’avaluen pels seus efectes secundaris, però a part d’això
s’ignoren. Són, majorment, els llocs en els quals també seria
acceptable posar una assignació.
Atès que no és bona idea retornar valors que puguin malinterpretar-se en algun context, hauríeu de fer servir funcions de l’Scheme normals sols per als casos en els quals sempre es retorna un valor útil, i fer servir funcions de l’Scheme buides see Funcions de l’Scheme buides) en cas contrari.
Per conveniència, les funcions de l’Scheme també es poden cridar
directament des de l’Scheme, fent un pont sobre l’analitzador
sintàctic del Lilypond. El seu nom pot utilitzar-se com el nom
d’una funció corrent. La comprovació de tipus dels arguments i el salt
d’arguments opcionals es produeix de la mateixa forma que quan es
crida des de dins del LilyPond, agafant el valor de l’Scheme
*unspecified*
el paper de la paraula reservada
\default
per saltar explícitament arguments opcionals.