A single argument pattern definition applies to multiple-argument patterns?How to Enable Syntax Coloring of Pattern Match Variable Only (i.e. Without Coloring any Associated Pattern)?Deep Pattern matching with repeating argumentsHow to apply multiple/complicated requirements for a pattern in a function inputDetecting a more general patternHow do I tell pattern searcher the order in which to search for patterns given in general form?Confused by the opts : OptionsPattern[ ] patternHow does one unpack the contents of a list while using rules to substitute values for each variable?Combinations of multiple matching patternsLogical AND of multiple patternsOptimize DownValues: extract “non-patterns” from Alternatives
Why is there is so much iron?
Certs-Engine and Magento Certified Developer Exam
How do I use long payment IDs in CLI v0.14 / GUI v0.14?
What are substitutions for coconut in curry?
Recruiter wants very extensive technical details about all of my previous work
Are ETF trackers fundamentally better than individual stocks?
PTIJ: Who should I vote for? (21st Knesset Edition)
This word with a lot of past tenses
Difference between 'dont avoir besoin' and 'en avoir besoin'
Is honey really a supersaturated solution? Does heating to un-crystalize redissolve it or melt it?
Is there a hypothetical scenario that would make Earth uninhabitable for humans, but not for (the majority of) other animals?
Why did it take so long to abandon sail after steamships were demonstrated?
Deletion of copy-ctor & copy-assignment - public, private or protected?
How could an airship be repaired midflight?
World War I as a war of liberals against authoritarians?
Are all passive ability checks floors for active ability checks?
Use of paid as adjective
Should Stotras and Mantras be recited aloud?
Violin - Can double stops be played when the strings are not next to each other?
centering a caption under a table
Should I use acronyms in dialogues before telling the readers what it stands for in fiction?
Knife as defense against stray dogs
While on vacation my taxi took a longer route, possibly to scam me out of money. How can I deal with this?
How to terminate ping <dest> &
A single argument pattern definition applies to multiple-argument patterns?
How to Enable Syntax Coloring of Pattern Match Variable Only (i.e. Without Coloring any Associated Pattern)?Deep Pattern matching with repeating argumentsHow to apply multiple/complicated requirements for a pattern in a function inputDetecting a more general patternHow do I tell pattern searcher the order in which to search for patterns given in general form?Confused by the opts : OptionsPattern[ ] patternHow does one unpack the contents of a list while using rules to substitute values for each variable?Combinations of multiple matching patternsLogical AND of multiple patternsOptimize DownValues: extract “non-patterns” from Alternatives
$begingroup$
Consider defining a pattern rule, such as
myFun[x_]:=x
As far as I understand Mathematica syntax, this rule means
whenever myFun appears with a single argument, replace the whole thing by the argument
Now, after the above definition, if we evaluate
myFun[x__]
x__
we see that even though the pattern x__
clearly symbolizes more than one argument, the single argument rule still gets executed!
Is this intended behavior? Maybe my syntax use is improper? How should I specify a single argument pattern rule which does not register with more-than-one argument patterns?
pattern-matching replacement rule argument-patterns
$endgroup$
add a comment |
$begingroup$
Consider defining a pattern rule, such as
myFun[x_]:=x
As far as I understand Mathematica syntax, this rule means
whenever myFun appears with a single argument, replace the whole thing by the argument
Now, after the above definition, if we evaluate
myFun[x__]
x__
we see that even though the pattern x__
clearly symbolizes more than one argument, the single argument rule still gets executed!
Is this intended behavior? Maybe my syntax use is improper? How should I specify a single argument pattern rule which does not register with more-than-one argument patterns?
pattern-matching replacement rule argument-patterns
$endgroup$
$begingroup$
@kglr If I try to definemyFun[x_] = x
without the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
18 hours ago
1
$begingroup$
In the second caseSet
has the attributeHoldFirst
resulting in the same behavior.
$endgroup$
– kglr
18 hours ago
add a comment |
$begingroup$
Consider defining a pattern rule, such as
myFun[x_]:=x
As far as I understand Mathematica syntax, this rule means
whenever myFun appears with a single argument, replace the whole thing by the argument
Now, after the above definition, if we evaluate
myFun[x__]
x__
we see that even though the pattern x__
clearly symbolizes more than one argument, the single argument rule still gets executed!
Is this intended behavior? Maybe my syntax use is improper? How should I specify a single argument pattern rule which does not register with more-than-one argument patterns?
pattern-matching replacement rule argument-patterns
$endgroup$
Consider defining a pattern rule, such as
myFun[x_]:=x
As far as I understand Mathematica syntax, this rule means
whenever myFun appears with a single argument, replace the whole thing by the argument
Now, after the above definition, if we evaluate
myFun[x__]
x__
we see that even though the pattern x__
clearly symbolizes more than one argument, the single argument rule still gets executed!
Is this intended behavior? Maybe my syntax use is improper? How should I specify a single argument pattern rule which does not register with more-than-one argument patterns?
pattern-matching replacement rule argument-patterns
pattern-matching replacement rule argument-patterns
asked 18 hours ago
KagaratschKagaratsch
4,73931348
4,73931348
$begingroup$
@kglr If I try to definemyFun[x_] = x
without the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
18 hours ago
1
$begingroup$
In the second caseSet
has the attributeHoldFirst
resulting in the same behavior.
$endgroup$
– kglr
18 hours ago
add a comment |
$begingroup$
@kglr If I try to definemyFun[x_] = x
without the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
18 hours ago
1
$begingroup$
In the second caseSet
has the attributeHoldFirst
resulting in the same behavior.
$endgroup$
– kglr
18 hours ago
$begingroup$
@kglr If I try to define
myFun[x_] = x
without the execution delay, I get the same behavior though...$endgroup$
– Kagaratsch
18 hours ago
$begingroup$
@kglr If I try to define
myFun[x_] = x
without the execution delay, I get the same behavior though...$endgroup$
– Kagaratsch
18 hours ago
1
1
$begingroup$
In the second case
Set
has the attribute HoldFirst
resulting in the same behavior.$endgroup$
– kglr
18 hours ago
$begingroup$
In the second case
Set
has the attribute HoldFirst
resulting in the same behavior.$endgroup$
– kglr
18 hours ago
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
The pattern x__
is a Pattern
object:
x__ //FullForm
Pattern[x,BlankSequence[]]
While the pattern object represents multiple arguments in a Rule
or a function definition, it is a single object. Hence, your definition applies.
Why are you applying a function to a Pattern
object, this is an unusual thing to do. Pattern objects usually appear inside of function definitions (Set
or SetDelayed
) or inside of rules (Rule
or RuleDelayed
).
$endgroup$
$begingroup$
My trouble is that after themyFun[x_]:=x
definition, if I try to use/.myFun[x__]->...
type of substitutions, the substitution is applied tox__
instead ofmyFun[x__]
which is mildly inconvenient. My workaround is to use/.myFun[x_,y__]->...
instead.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@KagaratschRule
doesn't have any Hold attributes, somyFun
evaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ...
.
$endgroup$
– Carl Woll
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to makeRule
hold patterns by default? I triedUnprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
);
);
, "mathjax-editing");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "387"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193389%2fa-single-argument-pattern-definition-applies-to-multiple-argument-patterns%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The pattern x__
is a Pattern
object:
x__ //FullForm
Pattern[x,BlankSequence[]]
While the pattern object represents multiple arguments in a Rule
or a function definition, it is a single object. Hence, your definition applies.
Why are you applying a function to a Pattern
object, this is an unusual thing to do. Pattern objects usually appear inside of function definitions (Set
or SetDelayed
) or inside of rules (Rule
or RuleDelayed
).
$endgroup$
$begingroup$
My trouble is that after themyFun[x_]:=x
definition, if I try to use/.myFun[x__]->...
type of substitutions, the substitution is applied tox__
instead ofmyFun[x__]
which is mildly inconvenient. My workaround is to use/.myFun[x_,y__]->...
instead.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@KagaratschRule
doesn't have any Hold attributes, somyFun
evaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ...
.
$endgroup$
– Carl Woll
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to makeRule
hold patterns by default? I triedUnprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
add a comment |
$begingroup$
The pattern x__
is a Pattern
object:
x__ //FullForm
Pattern[x,BlankSequence[]]
While the pattern object represents multiple arguments in a Rule
or a function definition, it is a single object. Hence, your definition applies.
Why are you applying a function to a Pattern
object, this is an unusual thing to do. Pattern objects usually appear inside of function definitions (Set
or SetDelayed
) or inside of rules (Rule
or RuleDelayed
).
$endgroup$
$begingroup$
My trouble is that after themyFun[x_]:=x
definition, if I try to use/.myFun[x__]->...
type of substitutions, the substitution is applied tox__
instead ofmyFun[x__]
which is mildly inconvenient. My workaround is to use/.myFun[x_,y__]->...
instead.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@KagaratschRule
doesn't have any Hold attributes, somyFun
evaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ...
.
$endgroup$
– Carl Woll
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to makeRule
hold patterns by default? I triedUnprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
add a comment |
$begingroup$
The pattern x__
is a Pattern
object:
x__ //FullForm
Pattern[x,BlankSequence[]]
While the pattern object represents multiple arguments in a Rule
or a function definition, it is a single object. Hence, your definition applies.
Why are you applying a function to a Pattern
object, this is an unusual thing to do. Pattern objects usually appear inside of function definitions (Set
or SetDelayed
) or inside of rules (Rule
or RuleDelayed
).
$endgroup$
The pattern x__
is a Pattern
object:
x__ //FullForm
Pattern[x,BlankSequence[]]
While the pattern object represents multiple arguments in a Rule
or a function definition, it is a single object. Hence, your definition applies.
Why are you applying a function to a Pattern
object, this is an unusual thing to do. Pattern objects usually appear inside of function definitions (Set
or SetDelayed
) or inside of rules (Rule
or RuleDelayed
).
answered 18 hours ago
Carl WollCarl Woll
70.5k394184
70.5k394184
$begingroup$
My trouble is that after themyFun[x_]:=x
definition, if I try to use/.myFun[x__]->...
type of substitutions, the substitution is applied tox__
instead ofmyFun[x__]
which is mildly inconvenient. My workaround is to use/.myFun[x_,y__]->...
instead.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@KagaratschRule
doesn't have any Hold attributes, somyFun
evaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ...
.
$endgroup$
– Carl Woll
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to makeRule
hold patterns by default? I triedUnprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
add a comment |
$begingroup$
My trouble is that after themyFun[x_]:=x
definition, if I try to use/.myFun[x__]->...
type of substitutions, the substitution is applied tox__
instead ofmyFun[x__]
which is mildly inconvenient. My workaround is to use/.myFun[x_,y__]->...
instead.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@KagaratschRule
doesn't have any Hold attributes, somyFun
evaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ...
.
$endgroup$
– Carl Woll
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to makeRule
hold patterns by default? I triedUnprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.
$endgroup$
– Kagaratsch
17 hours ago
2
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
$begingroup$
My trouble is that after the
myFun[x_]:=x
definition, if I try to use /.myFun[x__]->...
type of substitutions, the substitution is applied to x__
instead of myFun[x__]
which is mildly inconvenient. My workaround is to use /.myFun[x_,y__]->...
instead.$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
My trouble is that after the
myFun[x_]:=x
definition, if I try to use /.myFun[x__]->...
type of substitutions, the substitution is applied to x__
instead of myFun[x__]
which is mildly inconvenient. My workaround is to use /.myFun[x_,y__]->...
instead.$endgroup$
– Kagaratsch
17 hours ago
2
2
$begingroup$
@Kagaratsch
Rule
doesn't have any Hold attributes, so myFun
evaluates. Typically, one works around this by using HoldPattern, e.g., /. HoldPattern[myFun[x__]] -> ...
.$endgroup$
– Carl Woll
17 hours ago
$begingroup$
@Kagaratsch
Rule
doesn't have any Hold attributes, so myFun
evaluates. Typically, one works around this by using HoldPattern, e.g., /. HoldPattern[myFun[x__]] -> ...
.$endgroup$
– Carl Woll
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to make
Rule
hold patterns by default? I tried Unprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.$endgroup$
– Kagaratsch
17 hours ago
$begingroup$
Is there a way to make
Rule
hold patterns by default? I tried Unprotect[Rule]; SetAttributes[Rule, HoldAll]; Protect[Rule];
and it seems to work that way, but I get some weird error messages along the way.$endgroup$
– Kagaratsch
17 hours ago
2
2
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
$begingroup$
@Kagaratsch Changing Rule in this way is dangerous and not recommended. It will probably break some Mathematica functionality.
$endgroup$
– Carl Woll
16 hours ago
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193389%2fa-single-argument-pattern-definition-applies-to-multiple-argument-patterns%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
@kglr If I try to define
myFun[x_] = x
without the execution delay, I get the same behavior though...$endgroup$
– Kagaratsch
18 hours ago
1
$begingroup$
In the second case
Set
has the attributeHoldFirst
resulting in the same behavior.$endgroup$
– kglr
18 hours ago