Chapter 2.2.2
Exercise 2.24
(define ans (cons 1 (cons (cons 2 (cons (cons 3 (cons 4 '())) '())) '())))
Exercise 2.25
(define (pick x ls)
(define (sub x ls)
(if (null? ls) false
(if (pair? ls) (pick x ls) (if (= x ls) true false))))
(if (not (sub x (car ls))) (sub x (cdr ls)) true))
Exercise 2.26
> (define x (list 1 2 3))
> (define y (list 4 5 6))
> (append x y)
(1 2 3 4 5 6)
> (cons x y)
((1 2 3) 4 5 6)
> (list x y)
((1 2 3) (4 5 6))
Exercise 2.27
(define (rev ls)
(define (it ls re)
(if (null? ls) re (it (cdr ls) (cons (car ls) re))))
(it ls '()))
(define (d-rev ls)
(define (it ls re)
(if (null? ls) re
(if (pair? (car ls))
(it (cdr ls) (cons (d-rev (car ls)) re))
(it (cdr ls) (cons (car ls) re)))))
(it ls '()))
Exercise 2.28
(define (fringe ls)
(if (null? ls)
'()
(if (pair? (car ls))
(fringe (append (car ls) (fringe (cdr ls))))
(cons (car ls) (fringe (cdr ls))))))
Exercise 2.29
Exercise 2.30
(define (square-tree tree)
(define (square x) (* x x))
(map (lambda (sub)
(if (pair? sub)
(square-tree sub)
(square sub)))
tree))
Exercise 2.31
(define (tree-map f tree)
(map (lambda (x)
(if (pair? x)
(tree-map f x)
(f x)))
tree))
Exercise 2.32
(define (subsets s)
(define (g x) (cons (car s) x))
(if (null? s)
(list '())
(let ((rest (subsets (cdr s))))
(append rest (map g rest)))))