Patterns Involving Alternatives

Specifying patterns that involve alternatives.

This defines h to give p when its argument is either a or b:

h[a|b]:=p

The first two cases give p:

{h[a],h[b],h[c],h[d]}

You can also use alternatives in transformation rules:

{a,b,c,d}/.(a|b)->p

Here is another example, in which one of the alternatives is itself a pattern:

{1,x,x^2,x^3,y^2}/.(x|x^_)->q

When you use alternatives in patterns, you should make sure that the same set of names appear in each alternative. When a pattern like (a[x_]|b[x_]) matches an expression, there will always be a definite expression that corresponds to the object x. If you try to match a pattern like (a[x_]|b[y_]), then there still will be definite expressions corresponding to x and y, but the unmatched one will be (RefLink[Sequence, paclet:ref/Sequence])[ ].

Here f is used to name the head, which can be either a or b:

{a[2],b[3],c[4],a[5]}/.(f:(a|b))[x_]->r[f,x]