Vraag 1
Welke van de volgende Scheme termen is in feite syntactic sugar:
Vraag 2
Gegeven onderstaand programma:
(define (proc x) (cond ((= x 0) 1) ((= x 1) 2) ((= x 2) 3) ((= x 3) 4) (else (proc (- x 3)))))
Hoe vaak wordt tijdens de evaluatie van (proc 5) de primitieve procedure '=' uitgevoerd?
Vraag 3
Welke van onderstaande termen zijn allen special forms:
Vraag 4
Gegeven de volgende Scheme procedure.
(define (proc x) (cond ((= x 1) 0) ((< x 1) (+ 1 (proc (+ x 1)))) (else (- 1 (proc (- x 1))))))Wat is het resultaat van (proc 4)?
Vraag 5
Als Scheme een combinatie behandelt als ``special form'', wat is dan karakteristiek voor de behandeling van de combinatie? (Kies het meest nauwkeurige antwoord.)
Vraag 6
Gegeven de volgende procedure.
(define (a b c d) (if (= c 0) d (a b (- c 1) (+ d (b c)))))Wat zal het resultaat zijn van de volgende combinatie?
(a (lambda (x) (+ x 1)) 3 0)
Vraag 7
Een programmeur schrijft onderstaand programma om uit te testen of de boolean procedure ``and'' wel of geen special form is:
(define counter 0) (and (sequence (set! counter (+ counter 2)) #f ) (sequence (set! counter (+ counter 3)) #t))
Na evaluatie van dit programma observeert de programmeur de uitkomst van de ``and expressie'' en de waarde van de counter. Welke van onderstaande uitspraken is het meest nauwkeurig:
#f
dus, is ``and''
geen
special form.
#f
is en
de waarde van counter 2 is ``and'' een special form.
Vraag 8
Gegeven de volgende Scheme expressie:
(sequence 3 (set! counter 4))
Welke van onderstaande uitspraken is het meest nauwkeurig:
#t
.
Vraag 9
Theo beweert dat ``if'' als primitive niet in Scheme behoeft te worden opgenomen, immers ``if'' kan als volgt geimplementeerd worden:
(define (if a b c) (cond (a b) (else c)))
Hij test dit als volgt:
==> (if (= 1 1) 3 4) 3 ==> (if (= 1 2) 3 4) 4
en concludeert vervolgens uit de antwoorden dat de gegeven definitie van
if
correct is.
Alyssa vermoedt dat ``if'' niet op bovenstaande wijze kan worden
hergedefiniëerd; volgens haar kan wel in ieder programma, en voor
willekeurige expressies ``a'' ``b'' en ``c'' de expressie (if a b c)
vervangen worden door
(cond (a b) (else c))
zonder dat de
semantiek van het programma wijzigt.
Welke van onderstaande uitspraken is het meest nauwkeurig:
Vraag 10
Gegeven de volgende twee definities:
(define (p) (p)) (define (test x y) (if (= x 0) 0 y))
Na invoer van deze definities evalueren we
(test 0 (p))
. Welke van de
volgende uitspraken is het meest correct:
Vraag 11
Gegeven de volgende Scheme procedure:
(define proc (lambda (x y) (cond ((= x y) x) ((< x y) (proc (+ x 1) y)) (else (proc x (+ y 1))))))
Welke van de volgende namen correspondeert het beste met de definitie
van proc
?
min
max
abs
add
Vraag 12
Gegeven de volgende Scheme procedure:
(define (proc a b) (if (= a 0) b (proc (- a 1) (* a b))))
Geef aan wat de ruimte en tijd complexiteiten zijn wanneer we (proc n m)
evalueren; n en m zijn positieve gehele getallen.
ruimte | tijd | |
complexiteit | complexiteit | |
a. | 0(1) | 0(n) |
b. | 0(n) | 0(n) |
c. | 0(m) | 0(n) |
d. | 0(1) | 0(m) |
Vraag 13
Gegeven 3 Scheme procedures, ``mapcar'' ``odd?'' en ``sum-list'' die als volgt gebruikt kunnen worden:
==> (mapcar (lambda (x) (* x x)) '(1 2 3 4)) (1 4 9 16) ==> (odd? 1) #t ==> (sum-list '(1 2 3 4)) 10
Welke expressie berekent m.b.v. deze procedures de som van de oneven
elementen van een lijst l1
?
(sum-list (mapcar odd? l1))
(mapcar odd? (sum-list l1))
(sum-list (mapcar 'odd? l1))
Vraag 14
Gegeven de volgende lijst definities:
(define lijst-1 '(1 (2 (3)) 4 (5))) (define lijst-2 (cddr lijst-1)) (define lijst-3 (cadr lijst-1))
Wat zal na invoer van deze definities de waarden van lijst-2 en lijst-3
zijn?
lijst-2 | lijst-3 | |
a. | (4 (5)) | (2 (3)) |
b. | (4 (5)) | 2 |
c. | ((3)) | (2 (3)) |
d. | ((3)) | 2
|
Vraag 15
Gegeven de volgende Scheme code:
(define lijst-1 '(1 (2 (3)) 4 (5))) (define lijst-2 (cddr lijst-1)) (set-cdr! lijst-2 '(4 5))
Wat zal na evaluatie van deze code de waarden van
lijst-1
en lijst-2
zijn:
lijst-1 | lijst-2 | |
a. | (1 (2 (3)) 4 4 5) | (4 4 5) |
b. | (1 (2 (3)) 4 (5)) | (4 4 5) |
c. | (1 (2 (3)) 4 4 5) | ((4 5)) |
d. | (1 (2 (3)) 4 (5)) | ((4 5))
|
Vraag 16
Gegeven de volgende twee stukjes Scheme code, A en B:
A: (let ((x c1) (y c2)) c3) B: ((lambda (x y) c3) c1 c2)
Welke van de volgende uitspraken over A en B is het meest nauwkeurig?
Vraag 17
Gegeven de volgende 3 Scheme expressies, A, B en C:
A: '(1 2 3 4) B: (quote 1 2 3 4) C: (list 1 2 3 4)
Welke van de volgende uitspraken omtrent de evaluatie en het resultaat van A, B en C is het meest correct:
Vraag 18
In een environment waarin x
is gekoppeld (bound) aan 10,
wat is dan het resultaat van de volgende Scheme expressie?
(let ((x 1) (y x)) (let ((z (+ x y))) (+ z z)))
Vraag 19
Gegeven de volgende Scheme code:
(define (cube x) (* x x x)) (define (cube-list x) (if (null? x) '() .........I............. ))
Wat moet er op I worden ingevuld zodat de procedure ``cube-list'' toegepast op een lijst van getallen een lijst met de 3-e macht van deze getallen retourneert.
(cons (cube (car x)) (cube-list (cdr x)))
(cons (cube x) (cube-list (cdr x)))
(list (cube (car x)) (cube-list (cdr x)))
(list (cube x) (cube-list (cdr x)))
Vraag 20
Wat is het resultaat van de volgende Scheme expressie:
(cons (cons 1 2) (cons 3 4))
((1.2) 3.4)
(1 2 3.4)
(1.2 3.4)
((1.2) (3.4))
Vraag 21
Gegeven een procedure ``reverse-list'' welke toegepast op een lijst een nieuwe lijst retourneert waarin de elementen achterstevoren staan, dus
==> (reverse-list '(1 (2 3) 4)) (4 (2 3) 1)
Onderstaande definitie van reverse is nog niet compleet; geef aan wat er voor ``I'' moet worden ingevuld.
(define (reverse-list x) (if (null? x) '() .............I............... ))
(append (reverse-list (cdr x)) (list (car x)))
(cons (reverse-list (cdr x)) (list (car x)))
(append (reverse-list (cdr x)) (car x))
(cons (reverse-list (cdr x)) (car x))
Vraag 22
Een programmeur schrijft de volgende Scheme code:
(define (square x) (* x x)) (define (proc f x) (define (proc-iter lst answer) (if (null? lst) answer (proc-iter (cdr lst) (cons (f (car lst)) answer)))) (proc-iter x '()))
Wat zal de uitvoer zijn bij evaluatie van (proc square '(1 2 3 4))
?
(1 4 9 16)
(1 2 4 8)
(1 4 9.16)
(16 9 4 1)
Vraag 23
Gegeven de volgende Scheme procedures:
(define mycons (lambda (x y) (lambda (msg) (cond ((eq? msg 'mycar) x) ((eq? msg 'mycdr) y) (else (error "unknown method -- MYCONS" msg)))))) (define mycar (lambda (pair-proc) (pair-proc 'mycar))) (define mycdr (lambda (pair-proc) (pair-proc 'mycdr))) (define c (mycons 1 2))
Welke van de volgende uitspraken is het meest correct:
Vraag 24
Gegeven de volgende Scheme procedures:
(define mycons (lambda (x y) (lambda (msg) (cond ((eq? msg 'mycar) x) ((eq? msg 'mycdr) y) (else (error "unknown method -- MYCONS" msg)))))) (define mycar (lambda (pair-proc) (pair-proc 'mycar))) (define mycdr (lambda (pair-proc) (pair-proc 'mycdr))) (define c (mycons 1 2))
Hoe wordt deze stijl van programmeren genoemd?
Vraag 25
Welke van de volgende uitspraken over data directed programming is het meest correct?
Vraag 26
Gegeven een Scheme procedure replace welke in een lijst van symbolen
voorkomens
van een bepaald symbool kan vervangen door een andere set symbolen;
bijvoorbeeld in de lijst (a (a b) a b)
kunnen we alle voorkomens
van ``a''
vervangen door ``1 2 3'' door middel van:
==> (replace 'a '(1 2 3) '(a (a b) a b)) (1 2 3 (1 2 3 b) 1 2 3 b)
De implementatie van replace is hieronder gedeeltelijk gegeven:
(define (replace old new longlist) (cond ((atom? longlist) longlist) ((eq? (car longlist) old) (append new (replace old new (cdr longlist)))) (else ....................I...................... )))
Wat moet er voor I worden ingevuld:
(append (replace old new (car longlist)) (replace old new (cdr longlist)))
(append (car longlist) (replace old new (cdr longlist)))
(cons (replace old new (car longlist)) (replace old new (cdr longlist)))
(cons (car longlist) (replace old new (cdr longlist)))
Vraag 27
Gegeven de definitie van een object obj
:
(define obj (let ((a '())) (lambda (b) (sequence (set! a (cons b a)) a))))
Wat is het resultaat van evaluatie van de volgende expressie:
(list (obj 1) (obj 2) (obj 3))
Gegeven is dat de Scheme evaluator de operanden van rechts naar links evalueert (dus de meeste rechtse operand eerst; de meeste Scheme evaluatoren doen het andersom!):
((1) (2 1) (3 2 1))
(1 2 3)
((1 2 3) (2 3) (3))
(1 2 3 2 3 3)
Vraag 28
Gegeven de volgende Scheme code:
(define (obj-create a) (define (hulp b) (set! a (+ a b)) a) hulp) (define obj1 (obj-create 0)) (define obj2 (obj-create 0))
De environment die ontstaat na evaluatie van de code is voor een deel getekend in onderstaande figuur:
Welke van onderstaande uitspraken over pointers a, b, c, I en II, is het meest correct:
Vraag 29
Gegeven de volgende Scheme code:
(define lst1 '(1 2 3)) (define lst2 '(1 2 3)) (define lst3 lst2) (set-cdr! lst2 lst1)
Wat zijn de waarden van lst1, lst2 en lst3 na evaluatie van deze code:
lst1 | lst2 | lst3 | |
a. | (1 2 3) | (1 1 2 3) | (1 1 2 3) |
b. | (1 1 2 3) | (1 1 2 3) | (1 1 2 3) |
c. | (1 2 3) | (1 1 2 3) | (1 2 3) |
d. | (1 2 3) | (1 (1 2 3)) | (1 (1 2 3)) |
Vraag 30
Gegeven de volgende Scheme code:
(define (obj-create a) (define (hulp b) (set! a (+ a b)) a) hulp) (define obj1 (obj-create 0)) (obj1 5)
De environment die ontstaat tijdens evaluatie van de laatste expressie,
(obj1 5)
, is voor een deel getekend in onderstaande figuur:
Waarheen wijzen pointers I en II: