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
How difficult is it to simply disable/disengage the MCAS on Boeing 737 Max 8 & 9 Aircraft?
Why Choose Less Effective Armour Types?
How to plot polar formed complex numbers?
Can I use USB data pins as power source
This word with a lot of past tenses
Book about superhumans hiding among normal humans
If I can solve Sudoku, can I solve the Travelling Salesman Problem (TSP)? If so, how?
How to terminate ping <dest> &
Have researchers managed to "reverse time"? If so, what does that mean for physics?
Print a physical multiplication table
Bach's Toccata and Fugue in D minor breaks the "no parallel octaves" rule?
I am confused as to how the inverse of a certain function is found.
Why does a Star of David appear at a rally with Francisco Franco?
What is the Japanese sound word for the clinking of money?
Is "upgrade" the right word to use in this context?
How to deal with taxi scam when on vacation?
Python if-else code style for reduced code for rounding floats
Do I need to be arrogant to get ahead?
What do you call the act of removing a part of a word and replacing it with an apostrophe
What is the significance behind "40 days" that often appears in the Bible?
How to pronounce "I ♥ Huckabees"?
Shortcut for setting origin to vertex
How do I hide Chekhov's Gun?
Is there a symmetric-key algorithm which we can use for creating a signature?
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_] = xwithout the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
58 mins ago
1
$begingroup$
In the second caseSethas the attributeHoldFirstresulting in the same behavior.
$endgroup$
– kglr
56 mins 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 1 hour ago
KagaratschKagaratsch
4,72931348
4,72931348
$begingroup$
@kglr If I try to definemyFun[x_] = xwithout the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
58 mins ago
1
$begingroup$
In the second caseSethas the attributeHoldFirstresulting in the same behavior.
$endgroup$
– kglr
56 mins ago
add a comment |
$begingroup$
@kglr If I try to definemyFun[x_] = xwithout the execution delay, I get the same behavior though...
$endgroup$
– Kagaratsch
58 mins ago
1
$begingroup$
In the second caseSethas the attributeHoldFirstresulting in the same behavior.
$endgroup$
– kglr
56 mins ago
$begingroup$
@kglr If I try to define
myFun[x_] = x without the execution delay, I get the same behavior though...$endgroup$
– Kagaratsch
58 mins ago
$begingroup$
@kglr If I try to define
myFun[x_] = x without the execution delay, I get the same behavior though...$endgroup$
– Kagaratsch
58 mins ago
1
1
$begingroup$
In the second case
Set has the attribute HoldFirst resulting in the same behavior.$endgroup$
– kglr
56 mins ago
$begingroup$
In the second case
Set has the attribute HoldFirst resulting in the same behavior.$endgroup$
– kglr
56 mins 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_]:=xdefinition, 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
4 mins ago
1
$begingroup$
@KagaratschRuledoesn't have any Hold attributes, somyFunevaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ....
$endgroup$
– Carl Woll
2 mins ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min 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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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_]:=xdefinition, 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
4 mins ago
1
$begingroup$
@KagaratschRuledoesn't have any Hold attributes, somyFunevaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ....
$endgroup$
– Carl Woll
2 mins ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min 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_]:=xdefinition, 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
4 mins ago
1
$begingroup$
@KagaratschRuledoesn't have any Hold attributes, somyFunevaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ....
$endgroup$
– Carl Woll
2 mins ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min 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 52 mins ago
Carl WollCarl Woll
70.5k394184
70.5k394184
$begingroup$
My trouble is that after themyFun[x_]:=xdefinition, 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
4 mins ago
1
$begingroup$
@KagaratschRuledoesn't have any Hold attributes, somyFunevaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ....
$endgroup$
– Carl Woll
2 mins ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min ago
add a comment |
$begingroup$
My trouble is that after themyFun[x_]:=xdefinition, 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
4 mins ago
1
$begingroup$
@KagaratschRuledoesn't have any Hold attributes, somyFunevaluates. Typically, one works around this by using HoldPattern, e.g.,/. HoldPattern[myFun[x__]] -> ....
$endgroup$
– Carl Woll
2 mins ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min 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
4 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
4 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
2 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
2 mins ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min ago
$begingroup$
I see, very useful, thank you!
$endgroup$
– Kagaratsch
1 min 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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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_] = xwithout the execution delay, I get the same behavior though...$endgroup$
– Kagaratsch
58 mins ago
1
$begingroup$
In the second case
Sethas the attributeHoldFirstresulting in the same behavior.$endgroup$
– kglr
56 mins ago