Exercise 1.42

This is the $42^{th}$ question in SICP.

The Question

Exercise 1.42: Let $f$ and $g$ be two one-argument functions. The composition $f$ after $g$ is defined to be the function $x \mapsto f(g(x))$. Define a procedure compose that implements composition. For example, if inc is a procedure that adds 1 to its argument,

((compose square inc) 6)
49

The Answer

The above proposed compose is similar to the last exercise’s double. However, rather than applying the same function twice, we apply 2 different functions, the first after the second. This description gives us the following function:

(define (compose f g)
  (lambda (x) (f (g x))))

and testing:

> ((compose square inc) 6)
49
> ((compose square inc) 1)
4
> ((compose square inc) 3)
16

And it works!