How to implement Varient/Tagged Unions/Pattern Matching in Python?
metal
metal29a at gmail.com
Wed Dec 2 20:28:41 EST 2009
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"
More information about the Python-list
mailing list