Ответ 1
Z внутри совпадения шаблонов не относится к объявленному вами z, он вводит новую привязку переменной. Таким образом, первый случай будет соответствовать каждой возможной паре (привязка z к первому элементу пары и отбрасывание второго), а другие случаи никогда не будут достигнуты.
Если вы замените z
в шаблоне
`z`
он будет ссылаться на существующий z и не вводить новое связывание, поэтому он будет работать так, как вы намереваетесь. Вы также можете переименовать z в Z, если вам не нравится синтаксис с обратными окнами.