code: def rl(self, lis, op):
          
          it = reversed(lis)
          res = trans(it.next())
          for e in it:
              e = trans(e)
              res = op(e, res)
          return res
docs: performs this operation on a list from *right to left*
          op must take 2 args
          a,b,c  => op(a, op(b, c))