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

#### 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’haver 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 emmagatzemar-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.26.0 (stable-branch).

- Appendix A Tutorial de l’Scheme
  - A.1 Introducció a l’Scheme
    - A.1.1 Banc de sorra de l’Scheme
    - A.1.2 Variables de l’Scheme
    - A.1.3 Tipus de dades simples de l’Scheme
    - A.1.4 Tipus de dades compostes de l’Scheme
      - Parelles
      - Llistes
      - Llistes associatives (llistes-A)
      - Taules de hash
    - A.1.5 Càlculs a l’Scheme
    - A.1.6 Procediments de l’Scheme
      - Definició de procediments
      - Predicats
      - Valors de retorn
    - A.1.7 Condicionals de l’Scheme
      - if
      - cond
  - A.2 Scheme dins del LilyPond
    - A.2.1 Sintaxi de l’Scheme del LilyPond
    - A.2.2 Variables del LilyPond
    - A.2.3 Variables d’entrada i l’Scheme
    - A.2.4 Importació de l’Scheme dins del LilyPond
    - A.2.5 Propietats dels objectes
    - A.2.6 Variables del LilyPond compostes
      - Desplaçaments
      - Fraccions
      - Dimensions
      - Llistes-A de propietats
      - Cadenes de llistes-A
    - A.2.7 Representació interna de la música
  - A.3 Construcció de funcions complicades
    - A.3.1 Presentació de les expressions musicals
    - A.3.2 Propietats musicals
    - A.3.3 Duplicació una nota amb lligadures (exemple)
    - A.3.4 Afegir articulacions a les notes (exemple)
- B Interfícies per a programadors
  - B.1 Blocs de codi del LilyPond
  - B.2 Funcions de l’Scheme
    - B.2.1 Definició de funcions de l’Scheme
    - B.2.2 Ús de les funcions de l’Scheme
    - B.2.3 Funcions de l’Scheme buides
  - B.3 Funcions musicals
    - B.3.1 Definicions de funcions musicals
    - B.3.2 Ús de les funcions musicals
    - B.3.3 Funcions de substitució senzilles
    - B.3.4 Funcions de substitució intermèdies
    - B.3.5 Matemàtiques dins de les funcions
    - B.3.6 Funcions sense arguments
    - B.3.7 Funcions musicals buides
  - B.4 Funcions d’esdeveniments
  - B.5 Funcions de marcatge
    - B.5.1 Construcció d’elements de marcatge a l’Scheme
    - B.5.2 Com funcionen internament els elements de marcatge
    - B.5.3 Definició d’una ordre nova de marcatge
      - Sintaxi de la definició d’ordre de marcatge
      - Quant a les propietats
      - Un exemple complet
      - Adaptació d’ordres incorporades
    - B.5.4 Definició de noves ordres de llista de marcatge
  - B.6 Contextos per a programadors
    - B.6.1 Avaluació de contextos
    - B.6.2 Execució d’una funció sobre tots els objectes de la presentació
  - B.7 Funcions de callback
  - B.8 Ajustaments difícils
- C Interfícies de l’Scheme del LilyPond
- Appendix D GNU Free Documentation License
- Appendix E Índex del LilyPond