(a) Define a procedure (deep-member x e) that takes a list x and an element e and returns #t if the element e is in the list or in any lists that the list x contains.
e.g., (deep-member (list 1 2 (list 3 4 (list 5 6))) 5) => #t
(b) Define a procedure (sum-odd x) that returns the sum of the odd elements in the list x. If an element is itself a list the embedded sum must also be included. In your solution for sum-odd, you must use the filter and accumulate procedures as defined in the notes.
e.g., (sum-odd (1 2 (3 4 5))) => 9
(c) Define a procedure (assoc-list k v) that takes 2 lists of keys, k, and values, v; a list of pairs is returned;
e.g., (assoc-list '(a b c) '(1 2 3)) => ((a.1) (b.2) (c.3)).
(d) Define a procedure (keys a) that takes an association list produced from (c) and returns a list of keys;
e.g., (keys a) => (a b c)
(e) Define a procedure (values a) that takes an association list produced from (c) and returns a list of values;
e.g., (values a) => (1 2 3)
(f) Define a procedure (append-copy x y) that takes 2 list arguments and returns the result of appending the two lists. The procedure must not use the built-in append procedure and must not suffer from the sharing problem as seen in the append procedure described in the notes. For example:
(define a (list 1 2 3))
(define b (list 4 5 6))
(define c (append-copy a b))
c ; Should display (1 2 3 4 5 6)
(set-cdr! b (list 9 10))
c ; Should display (1 2 3 4 5 6)