On Sat, Jul 18, 2020 at 3:46 AM Terry Reedy <tjreedy@udel.edu> wrote:
A major points of Kohn's post is that 'case' is analogous to 'def' and match lists are analogous to parameter lists. In parameter lists, untagged simple names ('parameter names') are binding targets. Therefore, untagged simple names in match lists, let us call them 'match names' should be also. I elaborated on this in my response to Tobias.
There are indeed analogous aspects, although not in the most straightfoward/obvious ways. Still, perhaps even more so than there is analogy with assignment targets. This is related to one of my concerns regarding PEP 622. It may be tempting to see pattern matching as a form of assignment. However, that is quite a stretch, both conceptually and as a future direction. There is no way these 'match expressions' could be allowed in regular assignments – the way names are treated just needs to be different. And allowing them in walrus assignments doesn't make much sense either. Conceptually, it is strange to call this match operation an assignment. Most of the added power comes from checking that the object has a certain structure or contents – and in many cases, that is the only thing it does! As a (not always) handy side product, it is also able to assign things to specified targets. Even then, the whole pattern is not assigned to, only parts of it are. In mathematics, assignment (definition) and re-assignment is often denoted with the same sign as equality/identity, because it is usually clear from the context, which one is in question. Usually, however, it matters which one is in question. Therefore, as we well know, we have = for assignment, == for equality, and := to emphasize assignment. Matching is closer to ==, or almost :==. So, in many ways, is the assignment that is special, not the matching. It is also the main thing that differentiates this from the traditional switch–case construct, which the proposed syntax certainly resembles. —Koos