Make Repeater (100pts)

Implement the function make_repeater so that make_repeater(h, n)(x) returns h(h(...h(x)...)), where h is applied n times. That is, make_repeater(h, n) returns another function that can then be applied to another argument. For example, make_repeater(square, 3)(42) evaluates to square(square(square(42))).

def make_repeater(h, n):
    """Return the function that computes the nth application of h.

    >>> add_three = make_repeater(increment, 3)
    >>> add_three(5)
    8
    >>> make_repeater(triple, 5)(1) # 3 * 3 * 3 * 3 * 3 * 1
    243
    >>> make_repeater(square, 2)(5) # square(square(5))
    625
    >>> make_repeater(square, 4)(5) # square(square(square(square(5))))
    152587890625
    >>> make_repeater(square, 0)(5) # Yes, it makes sense to apply the function zero times! 
    5
    """
    "*** YOUR CODE HERE ***"

For an extra challenge, try defining make_repeater in a single one-line return statement using your compose function (defined in problem 1) and your accumulate function (defined in problem 3).