[ << Tutorial de l’Scheme ] | [Top][Contents][Index] | [ Interfícies per a programadors >> ] |
[ < Variables d’entrada i l’Scheme ] | [ Up: Scheme dins del LilyPond ] | [ Propietats dels objectes > ] |
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.
[ << Tutorial de l’Scheme ] | [Top][Contents][Index] | [ Interfícies per a programadors >> ] |
[ < Variables d’entrada i l’Scheme ] | [ Up: Scheme dins del LilyPond ] | [ Propietats dels objectes > ] |