PatternTest

p?test

is a pattern object that stands for any expression that matches p, and on which the application of test gives True.

Details

  • Any result for test[pval] other than True is taken to signify failure.
  • The operator ? has a high precedence. Thus _^_?t is _^(_?t), not (_^_)?t.
  • In a form such as __?test, every element in the sequence matched by __ must yield True when test is applied.
  • PatternTest has attribute HoldRest.

Examples

open allclose all

Basic Examples  (3)

Find cases of any expression that satisfies the NumberQ test:

Test whether a list has only positive elements:

Create a definition that only applies to numeric arguments:

Scope  (6)

Replace negative numbers with zero:

Find elements in a list that are divisible by 7:

Elements that are divisible by both 5 and 7:

Elements that are divisible by either 5 or 7:

Create a function that only evaluates when given a non-negative number and a prime:

Create a function that only evaluates for negative primes:

Use PatternTest on a complex pattern:

Search for numbers without allowing expressions to evaluate:

Just using NumberQ would allow each element to evaluate:

Properties & Relations  (2)

PatternTest applies test functions to patterns, which need not have names:

Condition evaluates a Boolean expression on named parts of a pattern:

Use Except to effectively negate PatternTest:

Possible Issues  (1)

PatternTest evaluates potential matches that are a part of a held expression:

Due to normal evaluation rules, expressions may evaluate before being examined by the test function:

Use the three-argument form of Function or write the pattern using Condition to prevent this:

Introduced in 1988
 (1.0)