A.2.4 Importació de l’Scheme dins del LilyPond

L’exemple anterior mostra com ‘exportar’ expressions musicals des de l’entrada a l’intèrpret de l’Scheme. El contrari també és possible. Col·locant-lo després de $, un valor de l’Scheme s’interpreta com si hagués estat introduït en la sintaxi del LilyPond. En comptes de definir \twice, l’exemple anterior podria també haver-se escrit com

…
$(make-sequential-music newLa)

Podem utilitzar $ amb una expressió de l’Scheme a qualsevol lloc en el qual usaríem \nom després d’ahver assignat l’expressió de l’Scheme a una variable nom. Aquesta substitució es produeix dins de l’‘analitzador lèxic’, de manera que el LilyPond no arriba a assabentar-se de la diferència.

No obstant, hi ha un inconvenient, el de la mesura del temps. Si haguéssim estat usant $ en comptes de # per definir newLa a l’exemple anterior, la següent definició de l’Scheme hagués fracassat perquè traLaLa no hauria estat definida encara. Per veure una explicació d’aquest problema de moment temporal, vegeu Sintaxi de l’Scheme del LilyPond.

Un aspecte posterior convenient poden ser els operadors d ‘divisió de llistes’ $@ i #@ per a la inserció dels elements d’una llista dins del context que l’envolta. Utilitzant-los, l’última part de l’exemple es podria haver escrit com como

…
{ #@newLa }

Aquí, cada element de la llista que està emmagatzemat a newLa s’agafa en seqüència i s’insereix a la llista, com si haguéssim escrit

{ #(first newLa) #(second newLa) }

Ara bé, en totes aquestes formes, el codi de l’Scheme s’avalua en el moment en el qual el codi d’entrada encara s’està processant, ja sigui a l’analitzador lèxic o a l’analitzador sintàctic. Si ens ca que s’executi en un moment posterior, hem de consultar Funcions de l’Scheme buides, o emmagatzermar-ho dins d’un procediment.

#(define (nopc)
  (ly:set-option 'point-and-click #f))

…
#(nopc)
{ c'4 }

Advertiments i problemes coneguts

No és possible barregar variables de l’Scheme i del LilyPond amb l’opció --safe.


Extender LilyPond v2.25.27 (development-branch).