enscript -r2G -L60
loop-2.sml
for å få rett sideinndeling)
Loop
og noen hjelpefunksjoner,
Loop
,
Loop
(rekursivt nedstigende), og
loop-2.sml
.
Loop
, figur 2.1 i læreboken, så er det
ikke definert hvordan 3 setninger i sekvens skal fortolkes, dvs.
" imp1 ; imp2 ; imp3
" kan fortolkes både som
" Seq(Seq(imp1,imp2),imp3)
" og som
" Seq(imp1,Seq(imp2.imp3))
".
Vis at dette er uten betydning gitt den semantikk som er definert
for sekvenser.
loop-2.sml
.
loop-2.sml
. Her får vi en rekursjon mellom definisjonen
for <IExp>
og <BExp>
. Dette krever
at vi gir definisjonene av syntaks gjensidig rekurivt ved
datatype IExp = Constant of Literal
| Variable of Ident
| Sum of IExp * IExp
| Prod of IExp * IExp
and
BExp = Eql of IExp * IExp
| Less of IExp * IExp
| Not of BExp
| And of BExp * BExp;
før den nye <IExp>
-produksjonen kan legges til.
Tilsvarende får vi en gjensidig rekursjon mellom semantikk-funksjonene
for <IExp>
og <BExp>
. Gjensidig
rekursjon mellom ml-funksjoner kan uttrykkes ved
val rec f = fn x => g(x-2)
and
g = fn x => if x <= 1 then 0 else f(x+1)+2;