-
Notifications
You must be signed in to change notification settings - Fork 1
19. apr
-
Funktioner, lets og lukkede scopes. Lokale variable behandles som LVar int, men de behandles løbende med varierende variablenavne alt efter, hvor langt ind i scopet med er kommet...(det er lettere at forklarer til mødet, men det er et stort problem).
Ken: Er det de Bruijn indecies der er problemet?
Eks:
fun testFunLet2 x = let val a = 1 fun innerFun y = a + y in a + innerFun x end
Oversætter til:
(prim (set_global test_fun.testFunLet2/15) (fn let 1 in letrec (fn (prim (smladdint) var:2 var:0)) in (prim (smladdint) var:1 (app var:0 var:2)) end end)) -
I lambda-sproget bruges en Lletrec, når der kommer en funktion efter, og en Llet, når der kommer en variable efter. Hvorfor skelnes mellem disse, når de alligevel indeholder to forskellige datatypeelementer?
Ken: Forslag: tag tre-fire konkrete eksempler med til mødet, start fx med følgende:
val addv = fn x => fn y => x + y fun addf x y = x + y val rec addvf = fn x => fn y => x + y
Måske kan I derefter se om I kan regne ud hvad værdierne af
test1ogtest2uden at køre programmetval f = fn x => x + 2 val f = fn y => if y > 0 then f(y - 1) else y + 500 val test1 = f 7 val g = fn x => x + 2 val rec g = fn y => if y > 0 then g(y - 1) else y + 500 val test2 = g 7
-
Derudover, hvorfor bruger Lletrec og Llet ikke deres liste (formegentligt lavet til at indeholde de lokale variable) i Llambda list * Lambda til netop at indeholde de lokale variable, men lader i stedet den næste variable være en nested Lletrec/Llet i Lambda-delen (som vel er designet til body-delen af let'en)?
-
Mødetidspunkt fremover, da blok 4 starter mandag den 22/4.
- Til at håndterer scopes kan vi benytte et environment som vi giver med rundt og så smider væk og på denne måde holde styr på det nuværende scope. Dette kan implementeres på flere måder, vi arbejder pt. med
- Bruges f.eks. ved
and
Example:
val test = let val rec even = fn n => if n = 0 then true else odd(n-1)
and odd = fn n => if n = 0 then false else even(n-1)
in even 5 end- Vi skriver nogle datoer til Ken.