When the pattern `[Posn(x, y), ...]` matches a list of positions,
since `Posn(x, y)` is followed by `...` the `x` is bound to a sequence of first coordinates and `y` is bound to a sequence of second coordinates.
In the template the `Posn(y, x)` is followed by `...` so the same number of positions is produced as the common length of x and y.
Your version would expect a list of two elements, you use & to indicate that you're collecting the remainder of the list as in:
fun flip_all([Posn(x, y), & rest]):
You'd need to amend the logic of the function body to iterate or recurse over the remainder. You'd also ended up with a nested list using your version but you can use & again to splice in the result, so if you wanted a recursive version of that it would be something like (skipping the base case):
In the template the `Posn(y, x)` is followed by `...` so the same number of positions is produced as the common length of x and y.