Pattern matching is one of the most desirable facilities in a computer algebra environment, yet one of the most difficult ones to implement. Part of the difficulty lies in the definition itself. There are two basic definitions and many grades in between. What is desirable for some users may not be for others, and what may be desirable for others may be too complicated to compute effectively.