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