Hi Mark,

Thank you for your interest and the questions.

1.  This really comes down to how you look at it, or how you define pattern matching.  The issue here is that the concept of pattern matching has grown into a large and somewhat diverse flock of interpretations and implementations (as a side note: interestingly enough, some of the only universally agreed-upon standards are to use `_` as a wildcard and not to mark names that capture/bind values---which are quite exactly the points most fiercely debatted here).

Anyway, the paper presents the pattern matching structure we are proposing as one of three major variants of pattern matching:
(a)  Matching arguments to parameters in a function call,
(b)  Matching elements to elements in iterable unpacking,
(c)  Matching tree-like data to general patterns in a conditional pattern matching structure.

The last one is the subject of the PEP and the paper.  Nonetheless, in the first two cases (a) and (b), we find that indeed the computer will validate that the data matched the pattern and raise an exception if this fails.  This is where this way of looking at it comes from.

2.  Yes, that is indeed a deliberate simplification.  The idea is to abstract away from the details of how exactly Python implements abstract syntax trees (which I honestly believe are irrelevant for the sake of the entire narrative).  Moreover, using strings here allows us to exemplify the literal patterns, rather only showcasing only the constructor/class pattern.

Essentially, this is a question of making the most out of the little space available.

Since you have addressed this email to me directly, I would like to take this opportunity and briefly stress that this paper really grew out of a team effort.  While I might have been the one pushing for an academic publication, the DLS'20 paper represents the input and ideas of all the authors, as well as the long discussions we had.  Of course, I am happy to answer any questions about the paper, but it would be wrong to see me as the one person behind it.

Cheers,
Tobias

Quoting Mark Shannon <m...@hotpy.org>:

Hi Tobias,

A couple of questions about the DLS 2020 paper.

1. Why do you use the term "validate" rather than "test" for the process of selecting a match?

It seems to me, that this is a test, not a validation, as no exception is raised if a case doesn't match.

2. Is the error in the ast matching example, an intentional "simplification" or just an oversight?

The example:

```
def simplify(node):
   match node:
       case BinOp(Num(left), '+', Num(right)):
           return Num(left + right)
       case BinOp(left, '+' | '-', Num(0)):
           return simplify(left)
       case UnaryOp('-', UnaryOp('-', item)):
           return simplify(item)
       case _:
           return node

```

is wrong.

The correct version is

```
def simplify(node):
   match node:
       case BinOp(Num(left), Add(), Num(right)):
           return Num(left + right)
       case BinOp(left, Add() | Sub(), Num(0)):
           return simplify(left)
       case UnaryOp(USub(), UnaryOp(USub(), item)):
           return simplify(item)
       case _:
           return node
```

Cheers,
Mark.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/ETZGYRCF4DR6RJXTHGXIRZXINXJ76J2D/Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/CUNO57W7KSIM2WRROC5R43ZT7HUQZCZ6/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to