code: def subst(s, x):
      
      if isinstance(x, list):
          return [subst(s, xi) for xi in x]
      elif isinstance(x, tuple):
          return tuple([subst(s, xi) for xi in x])
      elif not isinstance(x, Expr):
          return x
      elif is_var_symbol(x.op):
          return s.get(x, x)
      else:
          return Expr(x.op, *[subst(s, arg) for arg in x.args])
docs: Substitute the substitution s into the expression x.
      >>> subst({x: 42, y:0}, F(x) + y)
      (F(42) + 0)