Extender LilyPond: A.1.5 Cálculos en Scheme

### A.1.5 Cálculos en Scheme

Scheme se puede usar para hacer cálculos. Utiliza sintaxis prefija. Sumar 1 y 2 se escribe como `(+ 1 2)` y no como el tradicional 1+2.

    guile> (+ 1 2)
    3

Los cálculos se pueden anidar; el resultado de una función se puede usar para otro cálculo.

    guile> (+ 1 (* 3 4))
    13

Estos cálculos son ejemplos de evaluaciones; una expresión como `(* 3 4)` se sustituye por su valor `12`.

Los cálculos de Scheme son sensibles a las diferencias entre enteros y no enteros. Los cálculos enteros son exactos, mientras que los no enteros se calculan con los límites de precisión adecuados:

    guile> (/ 7 3)
    7/3
    guile> (/ 7.0 3.0)
    2.33333333333333

Cuando el intérprete de Scheme encuentra una expresión que es una lista, el primer elemento de la lista se trata como un procedimiento a evaluar con los argumentos del resto de la lista. Por tanto, todos los operadores en Scheme son operadores prefijos.

Si el primer elemento de una expresión de Scheme que es una lista que se pasa al intérprete no es un operador o un procedimiento, se produce un error:

    guile> (1 2 3)

    Backtrace:
    In current input:
      52: 0* [1 2 3]

    <unnamed port>:52:1: In expression (1 2 3):
    <unnamed port>:52:1: Wrong type to apply: 1
    ABORT: (misc-error)
    guile>

Aquí podemos ver que el intérprete estaba intentando tratar el 1 como un operador o procedimiento, y no pudo hacerlo. De aquí que el error sea "Wrong type to apply: 1".

Así pues, para crear una lista debemos usar el operador de lista, o podemos precederla de un apóstrofo para que el intérprete no trate de evaluarla.

    guile> (list 1 2 3)
    (1 2 3)
    guile> '(1 2 3)
    (1 2 3)
    guile>

Esto es un error que puede aparecer cuando trabaje con Scheme dentro de LilyPond.

#### LilyPond — Extender v2.24.4 (rama estable).