Is there a defined priority for pattern matching?Using a PatternTest versus a Condition for pattern...
Is there a lava-breathing lizard creature (that could be worshipped by a cult) in 5e?
Has any human ever had the choice to leave Earth permanently?
Citing paid articles from illegal web sharing
Non-Cancer terminal illness that can affect young (age 10-13) girls?
Why is Agricola named as such?
How to assess the long-term stability of a college as part of a job search
Strange "DuckDuckGo dork" takes me to random website
Why did Democrats in the Senate oppose the Born-Alive Abortion Survivors Protection Act?
Existence of Riemann surface, holomorphic maps
A Missing Symbol for This Logo
Eww, those bytes are gross
Does diversity provide anything that meritocracy does not?
Is there a defined priority for pattern matching?
What makes papers publishable in top-tier journals?
How does Leonard in "Memento" remember reading and writing?
Bash script to truncate subject line of incoming email
What is a DAG (Graph Theory)?
Is there any risk in sharing info about technologies and products we use with a supplier?
Is using an 'empty' metaphor considered bad style?
In Linux what happens if 1000 files in a directory are moved to another location while another 300 files were added to the source directory?
What happens when the wearer of a Shield of Missile Attraction is behind total cover?
Why was Lupin comfortable with saying Voldemort's name?
Explanation of a regular pattern only occuring for prime numbers
What game did these black and yellow dice come from?
Is there a defined priority for pattern matching?
Using a PatternTest versus a Condition for pattern matchingIs pure pattern matching without PatternTest and Condition Turing-complete?Classifying poker hands by pattern matchingMore general pattern fails to match everything the more specific pattern does.Detecting a more general patternPattern matching to head with HoldFirstHow to visualize pattern matching process?Pattern matching an expression involving TimesCompare arrays using custom pattern matchingPattern Match Bug with Equals?
$begingroup$
If you define a function g, like so:
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
why will Mathematica always return g[2] == "Even"
, even though NumberQ[2] == True
?
More specifically, is there a defined order in which Mathematica will try to match function cases? Does it evaluate the most specific match first?
pattern-matching expression-test
New contributor
$endgroup$
add a comment |
$begingroup$
If you define a function g, like so:
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
why will Mathematica always return g[2] == "Even"
, even though NumberQ[2] == True
?
More specifically, is there a defined order in which Mathematica will try to match function cases? Does it evaluate the most specific match first?
pattern-matching expression-test
New contributor
$endgroup$
$begingroup$
g[x_NumberQ]
means to match arguments with the headNumberQ
. What you want is to match arguments such thatNumberQ[x]
isTrue
, which isg[x_?NumberQ]
. Look upPatternTest[]
. (Before you make this correction, make sure to runClear[g]
first.)
$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
That's right---fixed.
$endgroup$
– wgoodall01
1 hour ago
2
$begingroup$
Once you have made this fix, evaluateDownValues[g]
; that should give a hint as to which case gets applied first. Generally, it tries to put special cases first before general ones.
$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
Or just execute?g
to see the order of the definitions.
$endgroup$
– Roman
13 mins ago
add a comment |
$begingroup$
If you define a function g, like so:
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
why will Mathematica always return g[2] == "Even"
, even though NumberQ[2] == True
?
More specifically, is there a defined order in which Mathematica will try to match function cases? Does it evaluate the most specific match first?
pattern-matching expression-test
New contributor
$endgroup$
If you define a function g, like so:
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
why will Mathematica always return g[2] == "Even"
, even though NumberQ[2] == True
?
More specifically, is there a defined order in which Mathematica will try to match function cases? Does it evaluate the most specific match first?
pattern-matching expression-test
pattern-matching expression-test
New contributor
New contributor
edited 1 hour ago
wgoodall01
New contributor
asked 1 hour ago
wgoodall01wgoodall01
1185
1185
New contributor
New contributor
$begingroup$
g[x_NumberQ]
means to match arguments with the headNumberQ
. What you want is to match arguments such thatNumberQ[x]
isTrue
, which isg[x_?NumberQ]
. Look upPatternTest[]
. (Before you make this correction, make sure to runClear[g]
first.)
$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
That's right---fixed.
$endgroup$
– wgoodall01
1 hour ago
2
$begingroup$
Once you have made this fix, evaluateDownValues[g]
; that should give a hint as to which case gets applied first. Generally, it tries to put special cases first before general ones.
$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
Or just execute?g
to see the order of the definitions.
$endgroup$
– Roman
13 mins ago
add a comment |
$begingroup$
g[x_NumberQ]
means to match arguments with the headNumberQ
. What you want is to match arguments such thatNumberQ[x]
isTrue
, which isg[x_?NumberQ]
. Look upPatternTest[]
. (Before you make this correction, make sure to runClear[g]
first.)
$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
That's right---fixed.
$endgroup$
– wgoodall01
1 hour ago
2
$begingroup$
Once you have made this fix, evaluateDownValues[g]
; that should give a hint as to which case gets applied first. Generally, it tries to put special cases first before general ones.
$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
Or just execute?g
to see the order of the definitions.
$endgroup$
– Roman
13 mins ago
$begingroup$
g[x_NumberQ]
means to match arguments with the head NumberQ
. What you want is to match arguments such that NumberQ[x]
is True
, which is g[x_?NumberQ]
. Look up PatternTest[]
. (Before you make this correction, make sure to run Clear[g]
first.)$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
g[x_NumberQ]
means to match arguments with the head NumberQ
. What you want is to match arguments such that NumberQ[x]
is True
, which is g[x_?NumberQ]
. Look up PatternTest[]
. (Before you make this correction, make sure to run Clear[g]
first.)$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
That's right---fixed.
$endgroup$
– wgoodall01
1 hour ago
$begingroup$
That's right---fixed.
$endgroup$
– wgoodall01
1 hour ago
2
2
$begingroup$
Once you have made this fix, evaluate
DownValues[g]
; that should give a hint as to which case gets applied first. Generally, it tries to put special cases first before general ones.$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
Once you have made this fix, evaluate
DownValues[g]
; that should give a hint as to which case gets applied first. Generally, it tries to put special cases first before general ones.$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
Or just execute
?g
to see the order of the definitions.$endgroup$
– Roman
13 mins ago
$begingroup$
Or just execute
?g
to see the order of the definitions.$endgroup$
– Roman
13 mins ago
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
TheOrderingOfDefinitions
- ... The Wolfram System follows the principle of trying to put more general definitions after more specific ones. This means that special cases of rules are typically tried before more general cases.
- Although in many practical cases, the Wolfram System can recognize when one rule is more general than another, you should realize that this is not always possible. For example, if two rules both contain complicated /; conditions, it may not be possible to work out which is more general, and, in fact, there may not be a definite ordering. Whenever the appropriate ordering is not clear, the Wolfram System stores rules in the order you give them.
ClearAll[g]
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
g /@ {1, 2}
{"number", "even"}
ClearAll[h]
h[x_?NumberQ] := "number"
h[x_?EvenQ] := "even"
h /@ {1, 2}
{"number", "number"}
$endgroup$
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
});
}
});
wgoodall01 is a new contributor. Be nice, and check out our Code of Conduct.
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%2f192278%2fis-there-a-defined-priority-for-pattern-matching%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$
TheOrderingOfDefinitions
- ... The Wolfram System follows the principle of trying to put more general definitions after more specific ones. This means that special cases of rules are typically tried before more general cases.
- Although in many practical cases, the Wolfram System can recognize when one rule is more general than another, you should realize that this is not always possible. For example, if two rules both contain complicated /; conditions, it may not be possible to work out which is more general, and, in fact, there may not be a definite ordering. Whenever the appropriate ordering is not clear, the Wolfram System stores rules in the order you give them.
ClearAll[g]
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
g /@ {1, 2}
{"number", "even"}
ClearAll[h]
h[x_?NumberQ] := "number"
h[x_?EvenQ] := "even"
h /@ {1, 2}
{"number", "number"}
$endgroup$
add a comment |
$begingroup$
TheOrderingOfDefinitions
- ... The Wolfram System follows the principle of trying to put more general definitions after more specific ones. This means that special cases of rules are typically tried before more general cases.
- Although in many practical cases, the Wolfram System can recognize when one rule is more general than another, you should realize that this is not always possible. For example, if two rules both contain complicated /; conditions, it may not be possible to work out which is more general, and, in fact, there may not be a definite ordering. Whenever the appropriate ordering is not clear, the Wolfram System stores rules in the order you give them.
ClearAll[g]
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
g /@ {1, 2}
{"number", "even"}
ClearAll[h]
h[x_?NumberQ] := "number"
h[x_?EvenQ] := "even"
h /@ {1, 2}
{"number", "number"}
$endgroup$
add a comment |
$begingroup$
TheOrderingOfDefinitions
- ... The Wolfram System follows the principle of trying to put more general definitions after more specific ones. This means that special cases of rules are typically tried before more general cases.
- Although in many practical cases, the Wolfram System can recognize when one rule is more general than another, you should realize that this is not always possible. For example, if two rules both contain complicated /; conditions, it may not be possible to work out which is more general, and, in fact, there may not be a definite ordering. Whenever the appropriate ordering is not clear, the Wolfram System stores rules in the order you give them.
ClearAll[g]
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
g /@ {1, 2}
{"number", "even"}
ClearAll[h]
h[x_?NumberQ] := "number"
h[x_?EvenQ] := "even"
h /@ {1, 2}
{"number", "number"}
$endgroup$
TheOrderingOfDefinitions
- ... The Wolfram System follows the principle of trying to put more general definitions after more specific ones. This means that special cases of rules are typically tried before more general cases.
- Although in many practical cases, the Wolfram System can recognize when one rule is more general than another, you should realize that this is not always possible. For example, if two rules both contain complicated /; conditions, it may not be possible to work out which is more general, and, in fact, there may not be a definite ordering. Whenever the appropriate ordering is not clear, the Wolfram System stores rules in the order you give them.
ClearAll[g]
g[x_?EvenQ] := "even"
g[x_?NumberQ] := "number"
g /@ {1, 2}
{"number", "even"}
ClearAll[h]
h[x_?NumberQ] := "number"
h[x_?EvenQ] := "even"
h /@ {1, 2}
{"number", "number"}
edited 1 hour ago
answered 1 hour ago
kglrkglr
186k10202421
186k10202421
add a comment |
add a comment |
wgoodall01 is a new contributor. Be nice, and check out our Code of Conduct.
wgoodall01 is a new contributor. Be nice, and check out our Code of Conduct.
wgoodall01 is a new contributor. Be nice, and check out our Code of Conduct.
wgoodall01 is a new contributor. Be nice, and check out our Code of Conduct.
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%2f192278%2fis-there-a-defined-priority-for-pattern-matching%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$
g[x_NumberQ]
means to match arguments with the headNumberQ
. What you want is to match arguments such thatNumberQ[x]
isTrue
, which isg[x_?NumberQ]
. Look upPatternTest[]
. (Before you make this correction, make sure to runClear[g]
first.)$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
That's right---fixed.
$endgroup$
– wgoodall01
1 hour ago
2
$begingroup$
Once you have made this fix, evaluate
DownValues[g]
; that should give a hint as to which case gets applied first. Generally, it tries to put special cases first before general ones.$endgroup$
– J. M. is computer-less♦
1 hour ago
$begingroup$
Or just execute
?g
to see the order of the definitions.$endgroup$
– Roman
13 mins ago