The average-damp
procedure takes a procedure as its argument and returns a procedure as its value. When given a procedure that takes one argument, average-damp
returns another procedure that computes the average of the values before and after applying the original function f
to its argument. It’s inside the fixed-point
procedure where that returned function is applied (iteratively).
So the average-damp
procedure doesn’t execute either (/ x y)
or (average(f whatami) whatami)
at all, it just uses the function passed to it to create a new function that it returns.