# Examen Interpretatie van Computerprogrammas juni 2023-2024 ## 1: M-eval Breidt M-eval uit met named let. Zorg ervoor dat de gegewone let blijft werken. 1) Implementeer alle predicaten en hulpfuncties die je nodig hebt om (named) lets te evalueren. 2) Implementeer als afgeleide functie 3) Implementeer met een "dedicated evaluator" procedure ## 2: Registermachine: M-eval Registermachine die bepaalt of een gegeven getal een Harshad-getal is. Input telkens moet in h1, en output in res. Te gebruiken registers: res, cont, v1, v2. *null?*, *deelbaar?*, *getal->cijferlijst*, *car*, *cdr*, en *+* zijn reeds geïmplementeerd. Voorbeeld: (is-harshad? 150): 1 + 5 + 0 moet 150/6 = true opleveren. ```scheme (define (is-harshad? getal) (define (harshad-hulp cijferlijst resultaat) (if (null? cijferlijst) (deelbaar? getal resultaat) (harshad-hulp (cdr cijferlijst) (+ resultaat (car cijferlijst))) ) ) (harshad-hulp (getal->cijferlijst getal) 0) ) ``` ## 3: Open vragen Beantwoord kort maar bonding. ### A-eval Is volgende Scheme-expressie een goede variant voor de *analyze-assignment*-procedure bij de analyzing evaluator? Motiveer. ```scheme (define (analyze-assignment exp) (lambda (env) (set-variable-value! (assignment-variable exp) (eval (assignment-value exp) env) env ) 'ok ) ) ``` ### Lazy Eval Voorspel de output van volgende expressie. Motiveer. ```scheme (begin (define x 1) (define (f a) a) (define (add! x a) (set! x (+ x a)) x) (define y (f (if (> 6 5) (add! x 1) (add! x 2)))) x ) ``` ### Garbage collection Geef twee voorbeelden van een Scheme-expressie die niet langer te bereiken waarden in het geheugen achterlaat; gebruik *set!*/*set-car!*/*set-cdr!*/... in het eerste voorbeeld. ### EC Eval ? ### Compilatie Achterhaal welke argumenten gebruikt zijn voor de *compile*-procedure, gegeven volgende gecompileerde expressie ```scheme ? ``` ## 4: Logisch programmeren ### Query Gegeven lijst van feiten ```scheme (werf ) (werknemer ) ``` Geef een querry die alle werven met taken teruggeeft waarvoor geen werknemer is. ### Regels Gegeven volgende regels ```scheme (assert! (rule (een-regel (?a) ?x (?a)))) (assert! (rule (een-regel (?a . (?b . ?c)) ?x (?a . (?x . ?r))) (een-regel (?b . ?c) ?x ?r))) ``` Naar welke awarde evalueert ```scheme (een-regel (1 2 3 4) 5 ?x) ```