Solutions: You can find the file with solutions for all questions here.

To begin the quiz, use the following ok command:

python3 ok -u

Question 1: WWSP: Scheme Lists

Use OK to test your knowledge with the following "What Would Scheme Print?" questions:

python3 ok -q wwsp-lists -u
scm> (define lst (list () '(1 . 2) '(1 2 . (3))))
scm> (cons (car lst) (car (cdr lst)))
scm> (cons (cdr (car (cdr lst))) (car lst))
scm> (list (car lst) (cdr lst))
scm> (append (car lst) (cdr lst))
scm> (cons (cdr lst) (car lst))

Question 2: Deep Map

Write the function deep-map, which takes a function fn and a nested list s. A nested list is a list where each element is either a number or a list (e.g. (1 (2) 3) where 1, (2), and 3 are the elements). It returns a list with identical structure to s, but replacing each non-list element by the result of applying fn on it, even for elements within sub-lists. For example:

scm> (define (double x) (* 2 x))
scm> (deep-map double '(2 (3 4)))
(4 (6 8))

Assume that the input has no dotted (malformed) lists.

Hint: You can use the functions map and list?, which checks if a value is a list.

(define (deep-map fn s)
(cond ((null? s) s) ((list? (car s)) (cons (deep-map fn (car s)) (deep-map fn (cdr s)))) (else (cons (fn (car s)) (deep-map fn (cdr s)))))

Use OK to test your code:

python3 ok -q deep-map

After you have unlocked all of the cases, submit your responses with:

python3 ok -v --submit