B.2.2 Ús de les funcions de l’Scheme (Extender LilyPond)

#### 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 instruccions`mark` 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.

#### 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