code: def fixed_point(is_zero, plus, minus, f, x):
      @memo_Y
      def _fixed_point(fixed_point_fun):
          def __fixed_point(collected, new):
              diff = minus(new, collected)
              if is_zero(diff):
                  return collected
              return fixed_point_fun(plus(collected, diff), f(diff))
          return __fixed_point
      return _fixed_point(x, f(x))