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













4












$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?










share|improve this question









$endgroup$











  • $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 attribute HoldFirst resulting in the same behavior.
    $endgroup$
    – kglr
    18 hours ago















4












$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?










share|improve this question









$endgroup$











  • $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 attribute HoldFirst resulting in the same behavior.
    $endgroup$
    – kglr
    18 hours ago













4












4








4





$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?










share|improve this question









$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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 18 hours ago









KagaratschKagaratsch

4,73931348




4,73931348











  • $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 attribute HoldFirst 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






  • 1




    $begingroup$
    In the second case Set has the attribute HoldFirst 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










1 Answer
1






active

oldest

votes


















6












$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).






share|improve this answer









$endgroup$












  • $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




    $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$
    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




    $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










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
);



);













draft saved

draft discarded


















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









6












$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).






share|improve this answer









$endgroup$












  • $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




    $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$
    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




    $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















6












$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).






share|improve this answer









$endgroup$












  • $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




    $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$
    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




    $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













6












6








6





$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).






share|improve this answer









$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).







share|improve this answer












share|improve this answer



share|improve this answer










answered 18 hours ago









Carl WollCarl Woll

70.5k394184




70.5k394184











  • $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




    $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$
    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




    $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






  • 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$
    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






  • 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

















draft saved

draft discarded
















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

He _____ here since 1970 . Answer needed [closed]What does “since he was so high” mean?Meaning of “catch birds for”?How do I ensure “since” takes the meaning I want?“Who cares here” meaningWhat does “right round toward” mean?the time tense (had now been detected)What does the phrase “ring around the roses” mean here?Correct usage of “visited upon”Meaning of “foiled rail sabotage bid”It was the third time I had gone to Rome or It is the third time I had been to Rome

Bunad

Færeyskur hestur Heimild | Tengill | Tilvísanir | LeiðsagnarvalRossið - síða um færeyska hrossið á færeyskuGott ár hjá færeyska hestinum