calc: Matching Commands

 
 11.11.10 Matching Commands
 --------------------------
 
 The ‘a m’ (‘calc-match’) [‘match’] function takes a vector of formulas
 and a rewrite-rule-style pattern, and produces a vector of all formulas
 which match the pattern.  The command prompts you to enter the pattern;
 as for ‘a r’, you can enter a single pattern (i.e., a formula with
 meta-variables), or a vector of patterns, or a variable which contains
 patterns, or you can give a blank response in which case the patterns
 are taken from the top of the stack.  The pattern set will be compiled
 once and saved if it is stored in a variable.  If there are several
 patterns in the set, vector elements are kept if they match any of the
 patterns.
 
    For example, ‘match(a+b, [x, x+y, x-y, 7, x+y+z])’ will return ‘[x+y,
 x-y, x+y+z]’.
 
    The ‘import’ mechanism is not available for pattern sets.
 
    The ‘a m’ command can also be used to extract all vector elements
 which satisfy any condition: The pattern ‘x :: x>0’ will select all the
 positive vector elements.
 
    With the Inverse flag [‘matchnot’], this command extracts all vector
 elements which do _not_ match the given pattern.
 
    There is also a function ‘matches(X, P)’ which evaluates to 1 if
 expression X matches pattern P, or to 0 otherwise.  This is sometimes
 useful for including into the conditional clauses of other rewrite
 rules.
 
    The function ‘vmatches’ is just like ‘matches’, except that if the
 match succeeds it returns a vector of assignments to the meta-variables
 instead of the number 1.  For example, ‘vmatches(f(1,2), f(a,b))’
 returns ‘[a := 1, b := 2]’.  If the match fails, the function returns
 the number 0.