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 does overlay work only on the first tcolorbox?

Pauli exclusion principle

Why do passenger jet manufacturers design their planes with stall prevention systems?

Simplify an interface for flexibly applying rules to periods of time

Are ETF trackers fundamentally better than individual stocks?

Adventure Game (text based) in C++

Time travel from stationary position?

Min function accepting varying number of arguments in C++17

New passport but visa is in old (lost) passport

Bacteria contamination inside a thermos bottle

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

How could a scammer know the apps on my phone / iTunes account?

Life insurance that covers only simultaneous/dual deaths

Describing a chess game in a novel

Have the tides ever turned twice on any open problem?

Python if-else code style for reduced code for rounding floats

Why one should not leave fingerprints on bulbs and plugs?

Why Choose Less Effective Armour Types?

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

Official degrees of earth’s rotation per day

What options are left, if Britain cannot decide?

Instead of a Universal Basic Income program, why not implement a "Universal Basic Needs" program?

Employee lack of ownership

I am confused as to how the inverse of a certain function is found.



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






  • 1




    $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
    11 mins ago










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










  • $begingroup$
    Is there a way to make Rule hold patterns by default?
    $endgroup$
    – Kagaratsch
    7 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
    12 mins ago






  • 1




    $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
    11 mins ago










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










  • $begingroup$
    Is there a way to make Rule hold patterns by default?
    $endgroup$
    – Kagaratsch
    7 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
    12 mins ago






  • 1




    $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
    11 mins ago










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










  • $begingroup$
    Is there a way to make Rule hold patterns by default?
    $endgroup$
    – Kagaratsch
    7 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
    12 mins ago






  • 1




    $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
    11 mins ago










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










  • $begingroup$
    Is there a way to make Rule hold patterns by default?
    $endgroup$
    – Kagaratsch
    7 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
    12 mins ago






  • 1




    $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
    11 mins ago










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










  • $begingroup$
    Is there a way to make Rule hold patterns by default?
    $endgroup$
    – Kagaratsch
    7 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
12 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
12 mins ago




1




1




$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
11 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
11 mins ago












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




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












$begingroup$
Is there a way to make Rule hold patterns by default?
$endgroup$
– Kagaratsch
7 mins ago




$begingroup$
Is there a way to make Rule hold patterns by default?
$endgroup$
– Kagaratsch
7 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

Are there any AGPL-style licences that require source code modifications to be public? Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Force derivative works to be publicAre there any GPL like licenses for Apple App Store?Do you violate the GPL if you provide source code that cannot be compiled?GPL - is it distribution to use libraries in an appliance loaned to customers?Distributing App for free which uses GPL'ed codeModifications of server software under GPL, with web/CLI interfaceDoes using an AGPLv3-licensed library prevent me from dual-licensing my own source code?Can I publish only select code under GPLv3 from a private project?Is there published precedent regarding the scope of covered work that uses AGPL software?If MIT licensed code links to GPL licensed code what should be the license of the resulting binary program?If I use a public API endpoint that has its source code licensed under AGPL in my app, do I need to disclose my source?

2013 GY136 Descoberta | Órbita | Referências Menu de navegação«List Of Centaurs and Scattered-Disk Objects»«List of Known Trans-Neptunian Objects»

Button changing it's text & action. Good or terrible? The 2019 Stack Overflow Developer Survey Results Are Inchanging text on user mouseoverShould certain functions be “hard to find” for powerusers to discover?Custom liking function - do I need user login?Using different checkbox style for different checkbox behaviorBest Practices: Save and Exit in Software UIInteraction with remote validated formMore efficient UI to progress the user through a complicated process?Designing a popup notice for a gameShould bulk-editing functions be hidden until a table row is selected, or is there a better solution?Is it bad practice to disable (replace) the context menu?