code: def compose(*fns):
      
      def compose2(f, g):
          return lambda x: f(g(x))
      return reduce(compose2, fns)
docs: Return the function composed with the given functions
  
      :param fns: functions
      :returns: a function
  
      >>> add2 = lambda x: x+2
      >>> mult3 = lambda x: x*3
      >>> new_fn = compose(add2, mult3)
      >>> new_fn(2)
      8
  
      .. note:: compose(fn1, fn2, fn3) is the same as fn1(fn2(fn3))
         which means that the last function provided is the first to be applied.