Quiz 1
arithmetic operators
(deffun (f o) (o 1 1))
(f +)
- (.61 = 80/131)
2
- (.20 = 26/131)
Error
[FunNotVal]
- (.19 = 25/131)
Syntax error
0 as condition
(if 0 #t #f)
- (.47 = 62/131)
#f
- (.46 = 60/131)
#t
- (.05 = 7/131)
Other: Error
- (.01 = 1/131)
Other: #f
- (.01 = 1/131)
Other: I don't know
redeclare var using defvar
(defvar x 0)
(defvar y x)
(defvar x 2)
x
y
- (.59 = 77/131)
2; 0
[DefOrSet, NestedDef]
- (.32 = 42/131)
Error
- (.04 = 5/131)
Other: 2; 2
- (.03 = 4/131)
Nothing is printed
- (.02 = 3/131)
0; 0
expose local defvar
(defvar x 42)
(deffun (create)
(defvar y 42)
y)
(create)
(equal? x y)
- (.65 = 85/131)
Error
- (.29 = 38/131)
42; #t
[FlatEnv]
- (.05 = 6/131)
Other: 42; Error
- (.01 = 1/131)
Other: #t
- (.01 = 1/131)
Other: I don't know
pair?
(pair? (pair 1 2))
(pair? (ivec 1 2))
(pair? '#(1 2))
(pair? '(1 2))
- (.44 = 57/131)
#t; #t; #t; #f
- (.27 = 35/131)
#t; #t; #t; #t
- (.14 = 18/131)
#t; #f; #t; #f
- (.06 = 8/131)
Other: #t; #f; #f; #t
- (.03 = 4/131)
Other: #t; #t; #f; #f
- (.02 = 3/131)
Other: #t; #f; #f; #f
- (.02 = 2/131)
Other: #t; #t; #f; #t
- (.02 = 2/131)
Other: I don't know
- (.01 = 1/131)
Other: Error
- (.01 = 1/131)
Other: Error; #f; #f; #t
let* and let
(let* ([v 1]
[w (+ v 2)]
[y (* w w)])
(let ([v 3]
[y (* v w)])
y))
- (.51 = 67/131)
9
- (.33 = 43/131)
Other: 3
- (.13 = 17/131)
27
- (.02 = 2/131)
Other: Error
- (.01 = 1/131)
Other: 15
- (.01 = 1/131)
Other: 81
defvar and let
(defvar x 3)
(defvar y (let ([y 6] [x 5]) x))
(* x y)
- (.77 = 101/131)
Other: 15
- (.09 = 12/131)
9
- (.08 = 11/131)
25
[FlatEnv]
- (.02 = 3/131)
Other: 30
- (.02 = 2/131)
Other: Error
- (.01 = 1/131)
Other: 18
- (.01 = 1/131)
Other: 90
fun-id equals to arg-id
(deffun (f f) f)
(f 5)
- (.53 = 70/131)
5
- (.46 = 60/131)
Error
- (.01 = 1/131)
Other: 5
scoping rule of let
(let ([x 4]
[y (+ x 10)])
y)
- (.51 = 67/131)
14
- (.48 = 63/131)
Error
- (.01 = 1/131)
Other: Nothing is printed
the right component of ivec
(right (ivec 1 2 3))
- (.77 = 101/131)
Error
- (.13 = 17/131)
2
- (.05 = 7/131)
Other: 3
- (.02 = 3/131)
Other: I don't know
- (.01 = 1/131)
Other: #'(2 3)
- (.01 = 1/131)
Other: 6
- (.01 = 1/131)
Other: Nothing is printed
identifiers
(defvar x 5)
(deffun (reassign var_name new_val)
(defvar var_name new_val)
(pair var_name x))
(reassign x 6)
x
- (.53 = 70/131)
'#(6 5); 5
[DefOrSet, NestedDef]
- (.20 = 26/131)
Error
- (.11 = 15/131)
'#(6 6); 5
- (.11 = 15/131)
'#(6 6); 6
- (.02 = 2/131)
Nothing is printed
- (.01 = 1/131)
Other: (5 6)
- (.01 = 1/131)
Other: 6
- (.01 = 1/131)
Other: I don't know
defvar, deffun, and let
(defvar a 1)
(deffun (what-is-a) a)
(let ([a 2])
(ivec
(what-is-a)
a))
- (.82 = 108/131)
‘#(1 2)
- (.15 = 20/131)
‘#(2 2)
- (.01 = 1/131)
Other: '#(1 1)
- (.01 = 1/131)
Other: I don't know
- (.01 = 1/131)
Other: Nothing is printed
syntax pitfall
(deffun (f a b) a + b)
(f 5 10)
- (.50 = 65/131)
15
- (.37 = 48/131)
Error
[FunNotVal]
- (.11 = 15/131)
Other: 10
- (.02 = 2/131)
5
- (.01 = 1/131)
Other: 5; 10
Quiz 2
circularity
(defvar x (mvec 2 3))
(set-right! x x)
(set-left! x x)
x
- (.50 = 51/102)
'#(#(2 #(2 3)) #(2 3))
[StructsCopyStructs]
- (.29 = 30/102)
x='#(x x) or something similar. Both (left x) and (right x) are x itself.
- (.16 = 16/102)
Error
[NoCircularity]
- (.01 = 1/102)
Other: #(#(2 3) #(2 3))
- (.01 = 1/102)
Other: '#(#(2 3) #(2 3))
- (.01 = 1/102)
Other: (2 (2 3) (2 (2 3)))
- (.01 = 1/102)
Other: I don't know
- (.01 = 1/102)
Other: Error
[NoCircularity]
eval order
(defvar x 0)
(ivec x (begin (set! x 1) x) x)
- (.71 = 68/96)
'#(0 1 1)
- (.18 = 17/96)
'#(0 1 0)
- (.10 = 10/96)
'#(1 1 1)
- (.01 = 1/96)
Other: Error
mvec as arg
(defvar x (mvec 1 2))
(deffun (f x)
(vset! x 0 0))
(f x)
x
- (.87 = 86/99)
'#(0 2)
- (.08 = 8/99)
'#(1 2)
[CallsCopyStructs]
- (.02 = 2/99)
Other: '#(0 0)
- (.02 = 2/99)
Other: Error
- (.01 = 1/99)
Other: Nothing is printed
var as arg
(defvar x 12)
(deffun (f x)
(set! x 0))
(f x)
x
- (.65 = 65/100)
12
- (.31 = 31/100)
0
[CallByRef, FlatEnv]
- (.02 = 2/100)
Other: Error
- (.01 = 1/100)
Other: 123
- (.01 = 1/100)
Other: Nothing is printed
seemly aliasing a var
(defvar x 5)
(deffun (set1 x y)
(set! x y))
(deffun (set2 a y)
(set! x y))
(set1 x 6)
x
(set2 x 7)
x
- (.59 = 59/100)
Other: 5; 7
- (.27 = 27/100)
6; 7
[CallByRef, FlatEnv]
- (.11 = 11/100)
5; 5
[DeepClosure, DefOrSet]
- (.02 = 2/100)
Other: Error
- (.01 = 1/100)
Other: 5; 6
mutable var in vec
(defvar x 3)
(defvar v (mvec 1 2 x))
(set! x 4)
v
x
- (.84 = 81/96)
'#(1 2 3); 4
- (.14 = 13/96)
'#(1 2 4); 4
[StructByRef]
- (.01 = 1/96)
Other: '#(1 2 3); 3
- (.01 = 1/96)
Other: Error
aliasing mvec in mvec
(defvar v (mvec 1 2 3 4))
(defvar vv (mvec v v))(vset! (vref vv 1) 0 100)
vv
- (.62 = 61/99)
'#(#(100 2 3 4) #(100 2 3 4))
- (.26 = 26/99)
'#(#(1 2 3 4) #(100 2 3 4))
[DefsCopyStructs, StructsCopyStructs]
- (.06 = 6/99)
Error
- (.04 = 4/99)
'#(#(1 2 3 4) #(1 2 3 4))
- (.01 = 1/99)
Other: '#(#(0 2 3 4) #(100 2 3 4))
- (.01 = 1/99)
Other: #(#(1 2 3 4) #(0 100))
vset! in let
(defvar x (mvec 123))
(let ([y x])
(vset! y 0 10))
x
- (.59 = 55/94)
'#(10)
- (.36 = 34/94)
'#(123)
[DefsCopyStructs]
- (.01 = 1/94)
Other: '#(0 1 1)
- (.01 = 1/94)
Other: '#(0 10)
- (.01 = 1/94)
Other: '#(1023)
- (.01 = 1/94)
Other: I don't know
- (.01 = 1/94)
Other: Error
set! in let
(defvar x 123)
(let ([y x])
(set! y 10))
x
- (.85 = 75/88)
123
- (.14 = 12/88)
10
[DefByRef]
- (.01 = 1/88)
Other: '#(1 2 3); 4
seemingly aliasing a var
again
(defvar x 10)
(deffun (f y z)
(set! x z)
y)
(f x 20)
x
- (.88 = 84/96)
10; 20
- (.09 = 9/96)
20; 20
[CallByRef]
- (.02 = 2/96)
Other: 10; 10
[DeepClosure, DefOrSet]
- (.01 = 1/96)
Other: Error
[IsolatedFun]
Quiz 3
fun returns lambda
(deffun (f x)
(lambda (y) (+ x y)))
((f 2) 1)
- (.82 = 84/102)
3
- (.17 = 17/102)
Error
[FunNotVal, IsolatedFun]
- (.01 = 1/102)
Other: #<procedure>
filter gt
(filter (lambda (n) (> 3 n)) '(1 2 3 4 5))
- (.75 = 76/102)
‘(1 2)
- (.22 = 22/102)
‘(4 5)
- (.01 = 1/102)
Other: '(0 1)
- (.01 = 1/102)
Other: '(1 2 3)
- (.01 = 1/102)
Other: '(3 4 5)
- (.01 = 1/102)
Other: Error
fun and state 1/4
(defvar x 1)
(defvar f
(lambda (y)
(+ x y)))
(set! x 2)
(f x)
- (.74 = 75/102)
4
- (.21 = 21/102)
3
[DeepClosure]
- (.06 = 6/102)
Other: Error
[IsolatedFun]
fun and state 2/4
(defvar x 1)
(deffun (f y)
(+ x y))
(set! x 2)
(f x)
- (.87 = 89/102)
4
- (.10 = 10/102)
3
[DeepClosure]
- (.03 = 3/102)
Other: Error
[IsolatedFun]
fun and state 3/4
(defvar x 1)
(defvar f
(lambda (y)
(+ x y)))
(let ([x 2])
(f x))
- (.78 = 80/102)
3
- (.13 = 13/102)
4
[FlatEnv]
- (.06 = 6/102)
Other: Error
[IsolatedFun]
- (.02 = 2/102)
Other: 2
- (.01 = 1/102)
Other: #<procedure>
fun and state 4/4
(defvar x 1)
(deffun (f y)
(+ x y))
(let ([x 2])
(f x))
- (.89 = 91/102)
3
- (.09 = 9/102)
4
[FlatEnv]
- (.02 = 2/102)
Other: Error
[IsolatedFun]
eval order
(deffun (f x) (+ x 1))
(deffun (new-f x) (* x x))
(f (begin
(set! f new-f)
10))
- (.42 = 43/102)
Other: 11
- (.30 = 31/102)
100
- (.25 = 25/102)
Error
[FunNotVal]
- (.01 = 1/102)
Other: 1
- (.01 = 1/102)
Other: 101
- (.01 = 1/102)
Other: 121
Counter
(deffun (make-counter)
(let ([count 0])
(lambda ()
(begin
(set! count (+ count 1))
count))))
(defvar f (make-counter))
(defvar g (make-counter))
(f)
(g)
(f)
(f)
(g)
- (.62 = 63/102)
1; 1; 2; 3; 2
- (.34 = 35/102)
1; 1; 1; 1; 1
[DeepClosure]
- (.01 = 1/102)
1; 1; 2; 3; 4
- (.01 = 1/102)
Other: #<procedure:f>; #<procedure:g>; #<procedure:f>; #<procedure:f>; #<procedure:g>
- (.01 = 1/102)
Other: 1; 1; 1; 2; 1
- (.01 = 1/102)
Other: Error
[DefOrSet, IsolatedFun]
hof + set!
(defvar y 3)
(+ ((lambda (x) (set! y 0) (+ x y)) 1)
y)
- (.70 = 71/102)
Other: 1
- (.18 = 18/102)
4
[DeepClosure, DefOrSet]
- (.10 = 10/102)
Error
[FunNotVal, IsolatedFun]
- (.02 = 2/102)
Other: 2
- (.01 = 1/102)
7
filter
(defvar l (list (ivec) (ivec 1) (ivec 2 3)))
(filter (lambda (x) (vlen x)) l)
- (.51 = 52/102)
'(#() #(1) #(2 3))
- (.24 = 24/102)
Error
- (.16 = 16/102)
'(#(1) #(2 3))
- (.07 = 7/102)
‘(0 1 2)
- (.01 = 1/102)
Other: '(#() #(2 3))
- (.01 = 1/102)
Other: '()
- (.01 = 1/102)
Other: I don't know
eq? fun fun 1/3
(eq? (λ (x) (+ x x))
(λ (x) (+ x x)))
- (.73 = 74/102)
#f
- (.16 = 16/102)
#t
- (.12 = 12/102)
Other: Error
eq? fun fun 2/3
(deffun (f x) (+ x x))
(deffun (g x) (+ x x))
(eq? f g)
- (.80 = 82/102)
#f
- (.11 = 11/102)
Other: Error
[FunNotVal]
- (.09 = 9/102)
#t
eq? fun fun 3/3
(deffun (f x) (+ x x))
(deffun (g) f)
(eq? f (g))
- (.77 = 79/102)
#t
- (.15 = 15/102)
#f
- (.08 = 8/102)
Other: Error
[FunNotVal,
IsolatedFun]
equal? fun fun
(deffun (f) (lambda () 1))
(equal? (f) (f))
- (.50 = 51/102)
#t
- (.40 = 41/102)
#f
- (.10 = 10/102)
Other: Error