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