Michael Hudson wrote:

Shannon -jj Behrens <[EMAIL PROTECTED]> writes:



On 4/20/05, M.-A. Lemburg <[EMAIL PROTECTED]> wrote:



My use case for switch is that of a parser switching on tokens.

mxTextTools applications would greatly benefit from being able
to branch on tokens quickly. Currently, there's only callbacks,
dict-to-method branching or long if-elif-elif-...-elif-else.


I think "match" from Ocaml would be a much nicer addition to Python
than "switch" from C.



Can you post a quick summary of how you think this would work?



Well, Python lists are used more imperatively and are not made up with cons cells,
we have dictionaries which because of ordering issues are not trivial to match,
and no general ordered records with labels. We have objects and not algebraic
data types. Literature on the topic usually indicates the visitor pattern as the
moral equivalent of pattern matching in an OO-context vs. algebraic data types/functional
one. I agree with that point of view and Python has idioms for the visitor pattern.


Interestingly even in the context of objects one can leverage the infrastructure that is
there for generalized copying/pickling to allow generalized pattern matching of
nested object data structures. Whether it is practical I don't know.


>>> class Pt:
...   def __init__(self, x,y):
...     self.x = x
...     self.y = y
...
>>> p(lambda _: Pt(1, _()) ).match(Pt(1,3))
(3,)
>>> p(lambda _: Pt(1, Pt(_(),_()))).match(Pt(1,Pt(Pt(5,6),3)))
(<__main__.Pt instance at 0x40200b4c>, 3)

http://codespeak.net/svn/user/pedronis/match.py is an experiment in that direction (preceding this discussion
and inspired while reading a book that was using OCaml for its examples).


Notice that this is quite grossly subclassing pickling infrastracture (the innocent bystander should probably not try that), a cleaner approach redoing that logic with matching in mind is possible and would be preferable.











_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to