Homework 4: Due Friday, 29 October at 5PM 1.) Let f and g be functions of one argument. The composition of f and g is the function x :--> f(g(x)). Define a procedure compose that takes two functions and implements composition. For example, ((compose square square) 2) --> 16. 2.) Exercise HTDP 21.1.2 (p. 310) 3.) Since we have functions, we really don't need structures or lists as primitives in our language. To see this: (define (make-pair a b) (lambda (m) (m x y))) (define (pair-a pr) (pr (lambda (p q) p))) a.) Explain these definition, and verify that (pair-a (make-pair a b)) indeed returns a by substitution. b.) Give an implementation of pair-b that extracts the second item from a pair. 4.) Since we have functions, we don't need numbers (at least nonnegative integers) as primitives in our language. Take the definitions (define zero (lambda (f) (lambda (x) x))) (define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x))))) a.) Explain the meaning of zero and add-1. b.) Define one and two directly (without using zero or add-1). c.) Give a direct (nonrecursive) definition of addition. d.) Give a direct (nonrecursive) definition of multiplication. e.) (Bonus points) Give a definition of (sub-1 n) that subtracts one from any non-zero number.