B.1 Blocs de codi del LilyPond
La creació d’expressions musicals a l’Scheme pot ser una tasca tediosa perquè a vegades impliquen molts nivells de profunditat de niuat i el codi resultant és extens. Per a algunes tasques senzilles, això es pot evitar utilitzant blocs de codi del LilyPond, que permeten usar la sintaxi ordinària del LilyPond dins de l’Scheme.
Els blocs de codi tenen l’aspecte següent:
#{ codi del LilyPond #}
Heus aquí un exemple trivial:
ritpp = #(define-event-function () () #{ ^"rit." \pp #} ) { c'4 e'4\ritpp g'2 }![]()
Els blocs de codi del LilyPond es poden fer servir en qualsevol
lloc en el qual es pugui escriure codi de l’Scheme. El lector de
l’Scheme en efecte es modifica perquè pugui incorporar blocs de
codi del LilyPond i pugui ocupar-se de les expressions de l’Scheme
incrustades que comencen per $
i #
.
El lector extrau el bloc de codi del LilyPond i genera una crida
en temps d’execució a l’analitzador sintàctic perquè interpreti el
codi del LilyPond. Les expressions de l’Scheme incrustades al
codi del LilyPond s’avaluen dins de l’entorn lèxic del bloc de
codi del LilyPond, de manera que pugui accedir-se a totes les
variables locals i els paràmetres de funció que estan disponibles
al punt en el qual s’escriu el bloc de codi del LilyPond. Les
variables definides en altres mòduls de l’Scheme, com els mòduls
que contenen blocs \header
i \layout
, no estan
accessibles com a variables de l’Scheme, és a dir, precedides
de #
, però es pot accedir a elles com a variables del
Lilypond, és a dir, precedides de \
.
Tota la música generada dins del bloc de codi té el seu ‘origin’ establert a la localització actual del punter d’entrada.
Un bloc de codi del Lilypond pot contenir qualsevol cosa que podríem utilitzar a la part dreta d’una assignació. A més, un bloc del LilyPond buit correspon a una expressió musical buida, i un bloc del LilyPond que conté diversos esdeveniments musicals es converteix en una expressió de música en seqüència.