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

Violin - Can double stops be played when the strings are not next to each other?

What is the adequate fee for a reveal operation?

The German vowel “a” changes to the English “i”

Bach's Toccata and Fugue in D minor breaks the "no parallel octaves" rule?

Time travel from stationary position?

Is a party consisting of only a bard, a cleric, and a warlock functional long-term?

Employee lack of ownership

Are ETF trackers fundamentally better than individual stocks?

New passport but visa is in old (lost) passport

Is it true that good novels will automatically sell themselves on Amazon (and so on) and there is no need for one to waste time promoting?

What did “the good wine” (τὸν καλὸν οἶνον) mean in John 2:10?

Welcoming 2019 Pi day: How to draw the letter π?

"of which" is correct here?

What is the Japanese sound word for the clinking of money?

How to deal with taxi scam when on vacation?

How do you talk to someone whose loved one is dying?

Are all passive ability checks floors for active ability checks?

How to pronounce "I ♥ Huckabees"?

ERC721: How to get the owned tokens of an address

Shortcut for setting origin to vertex

How do I change two letters closest to a string and one letter immediately after a string using Notepad++?

A diagram about partial derivatives of f(x,y)

Is there a place to find the pricing for things not mentioned in the PHB? (non-magical)

Do the common programs (for example: "ls", "cat") in Linux and BSD come from the same source code?



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













2












$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
    1 hour ago






  • 1




    $begingroup$
    In the second case Set has the attribute HoldFirst resulting in the same behavior.
    $endgroup$
    – kglr
    1 hour ago















2












$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
    1 hour ago






  • 1




    $begingroup$
    In the second case Set has the attribute HoldFirst resulting in the same behavior.
    $endgroup$
    – kglr
    1 hour ago













2












2








2





$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 2 hours ago









KagaratschKagaratsch

4,72931348




4,72931348











  • $begingroup$
    @kglr If I try to define myFun[x_] = x without the execution delay, I get the same behavior though...
    $endgroup$
    – Kagaratsch
    1 hour ago






  • 1




    $begingroup$
    In the second case Set has the attribute HoldFirst resulting in the same behavior.
    $endgroup$
    – kglr
    1 hour ago
















  • $begingroup$
    @kglr If I try to define myFun[x_] = x without the execution delay, I get the same behavior though...
    $endgroup$
    – Kagaratsch
    1 hour ago






  • 1




    $begingroup$
    In the second case Set has the attribute HoldFirst resulting in the same behavior.
    $endgroup$
    – kglr
    1 hour ago















$begingroup$
@kglr If I try to define myFun[x_] = x without the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
1 hour ago




$begingroup$
@kglr If I try to define myFun[x_] = x without the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
1 hour ago




1




1




$begingroup$
In the second case Set has the attribute HoldFirst resulting in the same behavior.
$endgroup$
– kglr
1 hour ago




$begingroup$
In the second case Set has the attribute HoldFirst resulting in the same behavior.
$endgroup$
– kglr
1 hour ago










1 Answer
1






active

oldest

votes


















4












$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
    1 hour 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
    59 mins ago










  • $begingroup$
    I see, very useful, thank you!
    $endgroup$
    – Kagaratsch
    57 mins 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
    42 mins 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









4












$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
    1 hour 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
    59 mins ago










  • $begingroup$
    I see, very useful, thank you!
    $endgroup$
    – Kagaratsch
    57 mins 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
    42 mins ago















4












$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
    1 hour 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
    59 mins ago










  • $begingroup$
    I see, very useful, thank you!
    $endgroup$
    – Kagaratsch
    57 mins 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
    42 mins ago













4












4








4





$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 1 hour 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
    1 hour 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
    59 mins ago










  • $begingroup$
    I see, very useful, thank you!
    $endgroup$
    – Kagaratsch
    57 mins 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
    42 mins 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
    1 hour 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
    59 mins ago










  • $begingroup$
    I see, very useful, thank you!
    $endgroup$
    – Kagaratsch
    57 mins 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
    42 mins 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
1 hour 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
1 hour 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
59 mins 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
59 mins ago












$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
57 mins ago




$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
57 mins 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
42 mins 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
42 mins 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

Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

Tähtien Talli Jäsenet | Lähteet | NavigointivalikkoSuomen Hippos – Tähtien Talli

Do these cracks on my tires look bad? The Next CEO of Stack OverflowDry rot tire should I replace?Having to replace tiresFishtailed so easily? Bad tires? ABS?Filling the tires with something other than air, to avoid puncture hassles?Used Michelin tires safe to install?Do these tyre cracks necessitate replacement?Rumbling noise: tires or mechanicalIs it possible to fix noisy feathered tires?Are bad winter tires still better than summer tires in winter?Torque converter failure - Related to replacing only 2 tires?Why use snow tires on all 4 wheels on 2-wheel-drive cars?