Exercise 189: Evaluate the expression
(extract < (cons 8 (cons 6 (cons 4 empty))) 5)
(cond [(empty? l) empty] [else (cond [(R (first l) t) (cons (first l) (extract R (rest l) t))] [else (extract R (rest l) t)])]))
Answer
(extract < (cons 8 (cons 6 (cons 4 empty))) 5)
=
(cond
[(empty? (cons 8 (cons 6 (cons 4 empty))) empty]
[else (cond
[(< (first (cons 8 (cons 6 (cons 4 empty))) 5)
(cons (first (cons 8 (cons 6 (cons 4 empty))))
(extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5))]
[else (extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5)])])
=
(cond
[false empty]
[else (cond
[(< (first (cons 8 (cons 6 (cons 4 empty))) 5)
(cons (first (cons 8 (cons 6 (cons 4 empty))))
(extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5))]
[else (extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5)])])
=
(cond
[else (cond
[(< 8 5)
(cons (first (cons 8 (cons 6 (cons 4 empty))))
(extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5))]
[else (extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5)])])
=
(cond
[else (cond
[false
(cons (first (cons 8 (cons 6 (cons 4 empty))))
(extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5))]
[else (extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5)])])
=
(extract < (rest (cons 8 (cons 6 (cons 4 empty)))) 5)
=
(extract < (cons 6 (cons 4 empty)) 5)
This takes us right back to the problem from the last exercise and we can use the rest of the solution from there.