Vorige Inhoud Volgende
_________________________________________________________________
SASL 860409 (c) 1986 by ORD-GROUP 47
een functie waarin je een argument B kan stoppen. De uitkomst
daarvan is een functie waarin je een argument C kan stoppen. De
uitkomst daarvan is of B of C al naar gelang de waarde van A.
Al met al zijn we nog niet klaar. Er staat nog steeds een n in de
formule. Die n gaan we weghalen met een methode die we abstra-
heren noemen.
((+ n) 1) Stelt de formule n+1 voor. De n is hier niet bekend en
moet nog ingevuld worden. Dit schrijven we als volgt:
((+ B L) C 1)
De L staat voor 'lambda' of leeg. De B is een zogenaamde combi-
nator en staat tussen de functie en het argument in. Die L staat
er om te zeggen: 'als je deze cel tegen komt en je hebt een
argument voor mij dan moet je die aan de rechterkant invullen.'
De C is ook een combinator en heeft zo ongeveer de betekenis:
'als je deze cel tegen komt en je hebt een argument dan moet je
die aan de linkerkant invullen'
((+ B L) C 1) is dus een functie waar 1 argument in moet. Als je
er 1 argument in stopt dan vertellen de B en de C je waar je hem
moet invullen. Het argument neemt de plaats in van de L. De
ontstane expressie kunnen we uitrekenen en er komt een meer dan
het argument uit.
We zullen deze combinatoren nu ook in onze fac invullen:
( S )
( C 1) ( S )
(if B ) (* B L) (fac B )
( C 0) ( C 1)
(= B L) (- B L)
De S combinator vertelt dat een argument aan beide kanten
ingevuld moet worden. Als men een argument neemt en telkens bij
een S aan beide kanten, een B rechts en een C links invult komt
het argument precies op die plaatsen terecht waar de n eerst
stond. Als we alles nu netjes achter elkaar zetten krijgen we
dit:
fac:
(((if B ((= B L) C 0)) C 1) S ((* B L) S (fac B ((- B L) C 1))))
Dit is inderdaad bijna wat er uit de compiler komt. Voor mensen
totaal onleesbaar maar voor de interpreter zeer begrijpelijk.
Merk op dat we hier het begrip 'faculteit' hebben opgeslagen en
niet 'de faculteit van n is n keer n min 1'. In onze repre-
sentatie komt geen dummy variabele voor.
Merk op dat fac wel naar zichzelf refereert. Dit kan worden
opgelost door wat gegoochel met combinatoren maar wij hebben een
iets eenvoudigere oplossing. Elk haakjespaar is een cel in onze
geheugenrepresentatie en in plaats van 'fac' vullen we gewoon een
pointer in naar de eerste cel van de definitie van de faculteit.
_________________________________________________________________
Vorige Inhoud Volgende