Skip to content

Flat attribute of function doesn't automatically applied to every subsequence of arguments #1485

@CallmeNezha

Description

@CallmeNezha

Following paragraph is taken from https://reference.wolfram.com/language/tutorial/EvaluationOfExpressions.html.en?source=footer

Attributes like Flat can affect not only evaluation, but also operations such as pattern matching. If you give definitions or transformation rules for a function, you must be sure to have specified the attributes of the function first.
Here is a definition for the flat function f:
In[3]:= f[x_, x_] := f[x] https://wolfram.com/xid/0m5dyglvgmwz4-si8
Because f is flat, the definition is automatically applied to every subsequence of arguments:
In[4]:= f[a, a, a, b, b, b, c, c] https://wolfram.com/xid/0m5dyglvgmwz4-iw6
Out[4]= f[a, b, c]

But in Mathics it was

In[1]:= SetAttributes[f, Flat]
Out[1]= None

In[2]:= f[f[a, b], c]
Out[2]= f[a, b, c]

In[3]:= f[x_, x_] := f[x]
Out[3]= None

In[4]:= f[a, a, a, b, b, b, c, c]
Out[4]= f[a, b, b, b, c, c]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions