Pathological Answer
This is the answer to the following question:
Pathological Question
What is the bound value of pattern variable $y after matching the following two tuple patterns:
- Tuple pattern A:
- ((ho, $_, ($a, $a)), ($a, $a, $b), ($a, *$b))
- Tuple pattern B:
- ($x, $x, $y)
Answer
Let's take this step by step, matching each element of the two tuple patterns in turn.
Match (ho, $_, ($a, $a)) to $x.
This succeeds with the following binding:
- $x:
(ho, $_, ($a, $a))
Match ($a, $a, $b) to $x.
Because $x is bound to a value, this becomes the same as matching:
- ($a, $a, $b) to
- (ho, $_, ($a, $a))
Which succeeds, binding:
- $a:
ho
- $b:
($a, $a)
$_ is an anonymous variable, so it is not bound (or bound to).
Match ($a, *$b) to $y.
Because both $a and $b have bound values, this becomes the same as matching:
- (ho, ho, ho) to
- $y
Which succeeds, binding:
- $y:
(ho, ho, ho)
So the overall match succeeds with the following bindings:
- $x:
- (ho, $_, ($a, $a))
- $a:
- ho
- $b:
- ($a, $a)
- $y:
- (ho, ho, ho)
And so $y is (ho, ho, ho)!
Note
If you got this right, you should really be using Pyke!