I want to get pattern matching like OCaml in python(ref:http:// en.wikipedia.org/wiki/Tagged_union)
I consider the syntax: def decl(): def Plus(expr, expr): pass def Minus(expr, expr): pass def Times(expr, expr): pass def Divide(expr, expr): pass def Value(str): pass @enum def expr(Plus, Minus, Times, Divide, Value): pass declare_types(locals()) def f(e): def _Plus(l, r): return '(%s+%s)' % (l, r) def _Minus(l, r): return '(%s-%s)' % (l, r) def _Times(l, r): return '(%s*%s)' % (l, r) def _Divide(l, r): return '(%s/%s)' % (l, r) def _Value(x): return x try: match(e, locals()) # visitor pattern except NoMatchedError: pass >>> print f(Times(Value("n"), Plus(Value("x", Value("y")))) (n*(x+y)) But it's hard to do with nested matching. Any suggestions would be appreciated BTW, Please don't ask "Why do you want to do like this" -- http://mail.python.org/mailman/listinfo/python-list