Comparative Programming Languages: verschil tussen versies

Uit Wina Examenwiki
Naar navigatie springen Naar zoeken springen
Dieter.castel (overleg | bijdragen)
Geen bewerkingssamenvatting
Dieter.castel (overleg | bijdragen)
Regel 16: Regel 16:


2) Gegeven het volgende programma in IMPLICIT-REFS:
2) Gegeven het volgende programma in IMPLICIT-REFS:
let d let f = proc(x) x
let d let f = proc(x) x
      in proc(g) begin f:=g; (f 1) end
      in proc(g) begin f:=g; (f 1) end
in (d (proc(x)2))
in (d (proc(x)2))


a) Geef het resultaat van het programma
a) Geef het resultaat van het programma
Regel 26: Regel 26:
bv.  
bv.  
a) (int->int) -> (bool->bool)
a) (int->int) -> (bool->bool)
b) ( ... -> ... ) -> ( ... -> ... ) -> ( ... -> ... )  
b) ( ... -> ... ) -> ( ... -> ... ) -> ( ... -> ... )  
[Aanvullen wie het nog weet]
[Aanvullen wie het nog weet]
c) %1
c) %1
d) ... [idem dito]
d) ... [idem dito]



Versie van 24 jan 2015 18:41

Fout bij het aanmaken van de miniatuurafbeelding: Bestand is zoek

Informatie over het examen

Oplossingen van (sommige) examens en oefeningen (zonder enige garanties).

Examenvragen

Januari 2015-01-24

1) Gegeven het volgende programma in PROC:

let g = proc(x) let y =x 
    in proc(z) (x-(y-z)
in ((g 1) 1)

a) Teken de AST en teken daar de contour diagrams op. Teken vanuit iedere bounded variable een pijl naar zijn declaratie b) Vertaal het programma naar LEXADDR waarbij er dus geen variable namen bestaan.

2) Gegeven het volgende programma in IMPLICIT-REFS:

let d let f = proc(x) x
      in proc(g) begin f:=g; (f 1) end
in (d (proc(x)2))

a) Geef het resultaat van het programma b) Geef de store aan het einde van het programma.

3) Gegeven een aantal types, geef een programma dat met inferrence dat type als resultaat geeft (%x is een var-type) bv. a) (int->int) -> (bool->bool)

b) ( ... -> ... ) -> ( ... -> ... ) -> ( ... -> ... ) [Aanvullen wie het nog weet]

c) %1

d) ... [idem dito]

4) Maak devolgende uitbreidingen op CLASSES: (1) fieldvalue obj field-name die de value teruggeeft van gegeven veld van het gegeven object (2) fieldvalue-set obj field-name exp die het gegeven veld van het gegeven object op de value van de gegeven expressie zet. Geef voor elk A) de syntax en B) de aanpassingen aan de interpreter en eventuele helper functies.

5) Iets met THREADS en wat de evaluatie is als er een lang tijdsslot wordt gegeven [idem dito]

Januari 2014

1) Gegeven een programmake:

a) Teken de AST.
b) Teken daar de contour diagrams op.
c) Teken vanuit iedere bounded variable een pijl naar zijn declaratie ofzoiets. (zoals in de slides, einde hoofdstuk 3)
d) Naar wat evalueert het programma?

2) gegeven een programmake in IMPLCIT(hoofdstuk 4):

a) Geef de uiteindelijke staat van de store.
b) Naar wat evalueert het programma?
c) Naar wat zou het evalueren moest het call-by-refence zijn ipv call-by-value?

3) Er zijn 3 stukjes programme gegeven met een "hole" in (hoofdstuk 5)

ze leken op (uit herinnering ...):
a) ((2-3) - [])
b) ([] - (2-3))
c) (let x = 3-1 in ([] x))   [en dus niet (let x = (2-3) in (x-2))]

Slechts 1 van de 3 is mogelijk. Welke en waarom?

4) Gegeven enkele expressies: Geef de unknown types en het type van de gehele expressies zoals INFERENCE (hoofdstuk 7) dat zou doen.

5) Vul CLASSES (hoofdstuk 9) aan met de expressie 'instanceof'(zoals bij Java).

Januari 2014 (25/01)

Zie kopie

1) Gegeven een programma:

a) Wat is het resultaat bij static-scoping
b) Wat is het resultaat bij dynamic-scoping
c) Schrijf een programma dat bij static-scoping de constante 0 functie is en bij dynamic-scoping het dubbel teruggeeft

2) Gegeven een programma:

a) Wat is de inhoud van de store op het einde van het programma
b) Wat is het resultaat van het programma bij call-by-value
c) Wat is het resultaat van het programma bij call-by-reference

3) Gegeven een programma, geef een trace van de value-of/k functie voor de continuation. (Zelfde trace als het scheme programma van de cursus geeft, maar dat enkel voor de value-of/k en niet de apply-cont).

bv.

   (x-5) => value-of/k((1-5), [])
         => value-of/k(1, []-<5>)
         => value-of/k(5, 1-[])
         => -4

maar dan met ingewikkeldere expressie...

4) Gegeven een aantal types, geef een programma dat met inferrence dat type als resultaat geeft (%x is een var-type)

bv.

   a) int
   b) (int -> int) -> (int ->bool)
   c) %1
   d) (%1 -> %2) -> (%2 -> int) -> (%1 -> bool)
   e) %1 -> %2
   f) (%1 -> %2) -> %1

5) Pas de interpreter (CLASSES) aan zodat je een methode kan oproepen op statische manier (met behulp van zijn klassenaam).

Zodat je kan schrijven: call-static <obj> <klassenaam> <methode-naam> <args>

Je moest hierbij de constraint afdwingen dat de klasse van obj dezelfde moest zijn als <klassenaam> of een subklasse.