A.1.5 Càlculs a l’Scheme

L’Scheme es pot usar per fer càlculs. Utilitza sintaxi prefixa. Sumar 1 i 2 s’escriu com (+ 1 2) i no com el tradicional 1+2.

guile> (+ 1 2)
3

Els càlculs es poden niuar; el resultat d’una funció es pot usar per a un altre càlcul.

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

Aquests càlculs són exemple d’avaluacions; una expressió com (* 3 4) es substitueix pel seu valor 12.

Els càlculs de l’Scheme són sensibles a les diferències entre enters i no enters. Els càlculs enters són exactes, mentre que els no enters es calculen amb els límits de precisió adequats:

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

Quan l’intèrpret de l’Scheme troba una expressió que és una llista, el primer element de la llista es tracta com un procediment a avaluar amb els arguments de la resta de la llista. Per tant, tots els operadors a l’Scheme són operadors prefixos.

Si el primer element d’una expressió de l’Scheme que és una llista que es passa a l’intèrpret no és un operador o un procediment, es produeix 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í podem veure que l’intèrpret estava intentant tractar l’1 com un operador o procediment, i no ho va poder fer. D’aquí que l’error sigu "Wrong type to apply: 1".

Així doncs, per crear una llista hem d’usar l’operador de llista, o podem precedir-la d’un apòstrof perquè l’intèrpret no intenti avaluar-la.

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

Això és un error que pot aparèixer quan treballeu amb l’Scheme dins del LilyPond.


Extender LilyPond v2.25.27 (development-branch).