is an attribute that can be assigned to a symbol f to indicate that all expressions involving nested functions f should be flattened out. This property is accounted for in pattern matching.
- Flat corresponds to the mathematical property of associativity.
- For a symbol f with attribute Flat, f[f[a,b],f[c]] is automatically reduced to f[a,b,c].
- Functions like Plus, Times, and Dot are Flat.
- For a Flat function f, the variables x and y in the pattern f[x_,y_] can correspond to any sequence of arguments.
- The Flat attribute must be assigned before defining any values for a Flat function.
Examplesopen allclose all
Basic Examples (3)
In pattern matching, Flat allows sequences of elements to be replaced:
Properties & Relations (5)
ReplaceRepeated may be helpful in ensuring all occurrences are replaced:
For a flat function f that is not OneIdentity, when f[x_] is compared with f[expr], the pattern matcher will attempt to bind x_ to f[expr] first, and only if that fails to expr:
If the function also has attribute OneIdentity, the first attempt is skipped:
Possible Issues (4)
Longest can be used to prevent additional matches for shorter subexpressions:
Repeated can be used as a pattern that only matches a single argument, even inside a flat function:
The following restriction works because x_Plus matches Plus[b,c]:
Using BlankSequence on the left-hand-side produces more consistent results: