Vorige Inhoud Volgende
_________________________________________________________________
SASL 860409 (c) 1986 by ORD-GROUP 46
Een aantal standaard functie shebben twee argumenten nodig, zoals
+ - * / mod
De formule 5+3 wordt intern opgeslagen als
((+ 5) 3)
Merk op dat tussen elk haakjespaar er precies 2 objecten staan.
Het linker object is een functie en het rechter object is het
argument voor die functie. We noemen zo'n haakjespaar ook wel een
cel.
+ Is strikt genomen een functie waar een argument ingaat en waar
een functie uitkomt. Zo komt uit (+ 5) de functie 'er vijf bij
optellen'. Als men in deze functie een argument stopt zal de
functie er vijf bij optellen en het resultaat teruggeven. De
functie ((+ 5) 3) is dus 'er vijf bij optellen' van 3. De uit-
komst is natuurlijk 8.
Op deze manier worden alle functies in SASL gereduceerd tot een
functie van 1 argument. Deze reductie heet currying, naar de
uitvinder Curry.
Wij gaan nu eens kijken naar wat de compiler doet met de volgende
definitie van de faculteitsfunctie
Als invoer voor de compiler hebben we:
fac 0=1
fac n=n*fac(n-1)
Dit is een definitie van de functie 'fac'. Het eerste dat de
compiler doet is dit omzetten naar een enkele uitdrukking.
fac n= if (n=-) then 1 else n*fac(n-1)
Nu worden de '=' de '-' en de '*' naar voren gehaald en alle
functies worden gecurried geschreven. We krijgen dan
( )
( 1) ( )
(if ) (* n) (fac )
( 0) ( 1)
(- n) (- n)
Waarbij voor de duidelijkheid het haakjesniveau verticaal is
uitgezet.
De 'if A then B else C' wordt: (((if A) B) C)
De 'n=0' wordt: ((= n) 0)
De 'n-1' wordt: ((- n) 1)
De 'A*B' wordt: ((* A) B)
Dit dient weer op dezelfde manier te worden gelezen als bij de
plus. '(= n)' is dus de functie 'is het gelijk aan n?'. (if A) is
_________________________________________________________________
Vorige Inhoud Volgende