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

Reply via email to