Question 1 @ 2025-03-11 19:52
Which of the following definitions would be correctly implementing division?
(For simplicity, assume that it should work only for inputs that are integer-divisible.)
-
(define / (lambda (m n) (if (zero? m) 0 (add1 (/ (- m n) n)))))
-
(define/rec / (lambda (m n) (if (zero? m) 0 (add1 (/ (- m n) n)))))
-
(define/rec / (lambda (m n) (if (zero? m) 1 (add1 (/ (- m n) n)))))
-
(define/rec / (lambda (m n) (if (zero? m) 0 (add1 (/ m n)))))
-
(define / (lambda (m n) (if (zero? m) 1 (add1 (/ (- m n) n)))))
Question 2 @ 2025-03-11 19:55
We now know that Racket has for-each function that is similar to map
except that it doesn’t collect the results into a list. Many languages
have a similar functionality, for example, JS has x.forEach(...) .
Why is such functionality needed?
-
It’s not really needed.
-
It’s a good signal for readers (eg, when debugging) that you’re calling this for side-effects only.
-
It’s a nice-to-have memory optimization.
-
It’s a necessary save-memory feature, so we don’t hold onto expensive resources.
Question 3 @ 2025-03-11 19:56
What is the expected result of the following plain Racket code?
(let ([b (box 0)])
(lambda (msg)
(match msg
['+1 (set-box! b (+ 1 (unbox b)))]
['*2 (set-box! b (* 2 (unbox b)))]
['get (unbox b)]))))
(define thing-a (make-thing))
(thing-a '+1)
(define thing-b (make-thing))
(thing-a '*2)
(thing-b '+1)
(list (thing-a 'get) (thing-b 'get))
-
'(0 0) -
'(0 1) -
'(1 1) -
'(1 2) -
'(2 1) -
'(2 2) -
'(2 3) -
'(3 2) - Runtime error
- Syntax error
Question 4 @ 2025-03-11 19:58
In the context of implementing a programming language with a set!
operation to modify variables, what is an advantage of choosing to
return the value that was assigned as the behavior for set!
expressions?
-
It is more efficient at runtime.
-
It is easier to compile.
-
It enables chaining assignments and combining mutations, and using their results.
-
It makes program development more explicit and therefore more robust.
-
It aligns with Racket’s approach to variable mutation.
-
There’s no advantage — on the contrary: it can lead to race conditions.
-
None of the above.
Question 5 @ 2025-03-11 20:00
Reminder: in Typed Racket, the following numerical subtype relationships hold:
Which of the following function types are a subtype of
Integer -> Integer?
-
Zero -> Zero -
Zero -> Integer -
Zero -> Number -
Integer -> Zero -
Integer -> Integer -
Integer -> Number -
Number -> Zero -
Number -> Integer -
Number -> Number