Exercises
Exercise 2.30
Define a function square-tree
analogous to the square-list
function of exercise 2.21. That is, square-list
should behave as follows:
> (square-tree
(list 1
(list 2 (list 3 4) 5)
(list 6 7)))
(1 (4 (9 16) 25) (36 49))
Define square-tree
both directly (i.e., without using any higher-order functions) and also by using map
and recursion.
Exercise 2.31
Abstract your answer to exercise 2.30 to produce a function tree-map
with the property that square-tree
could be defined as
(defun square-tree (tree)
(tree-map square tree))
Exercise 2.32
We can represent a set as a list of distinct elements, and we can represent the set of all subsets of the set as a list of lists. For example, if the set is (1 2 3)
, then the set of all subsets is (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))
. Complete the following definition of a function that generates the set of subsets of a set and give a clear explanation of why it works:
(defun subsets
(('())
'(()))
(((cons _ tail))
(let ((rest (subsets tail)))
(append rest (lists:map <??> rest)))))