Evaluate Only Part of a Function
Clash Royale CLAN TAG#URR8PPP
up vote
5
down vote
favorite
I have a list of functions, each containing none or more of the functions Plus
, Times
, Subtract
and Divide
. They could be in any arrangement and with any numbers. This is one such example.
HoldForm[Plus[3+Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]]*
There is an error here, The above should read: Plus[3,Times[7
The numbers can be any positive integer. I need to calculate just the Divide
and Subtract
functions to find out if they evaluate to 1 or 0 respectively as I consider functions in the list that have this property trivial and I want to filter them out.
I am somewhat a beginner with Wolfram/Mathematica code and I have been attempting to extract the Divide
and Subtract
parts as a list and then calculating just them parts but so-far my attempts at solving this have been totally unfruitful, partly because I can't know beforehand where the Divide
or Subtract
functions are in the function or how deep they will be.
Is there a way to accomplish this?
Edit: Just to help clarify what I am trying to achieve. I have a list of functions such as
HoldForm[Plus[3,Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]],
HoldForm[Plus[7,Times[2,Divide[16,Subtract[9,Plus[4,1]]]]]],
HoldForm[Plus[3,Times[7,9],29]]
I need to remove the first element from the list because it is a function that divides by 1 (and subtracts 0), making is only trivially different from the 3rd element of the list. After removing the first function I want to display the output like this
$7+2 frac169-(4+1)$,$3+7times 9+29$
list-manipulation functions replacement symbolic
New contributor
 |Â
show 6 more comments
up vote
5
down vote
favorite
I have a list of functions, each containing none or more of the functions Plus
, Times
, Subtract
and Divide
. They could be in any arrangement and with any numbers. This is one such example.
HoldForm[Plus[3+Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]]*
There is an error here, The above should read: Plus[3,Times[7
The numbers can be any positive integer. I need to calculate just the Divide
and Subtract
functions to find out if they evaluate to 1 or 0 respectively as I consider functions in the list that have this property trivial and I want to filter them out.
I am somewhat a beginner with Wolfram/Mathematica code and I have been attempting to extract the Divide
and Subtract
parts as a list and then calculating just them parts but so-far my attempts at solving this have been totally unfruitful, partly because I can't know beforehand where the Divide
or Subtract
functions are in the function or how deep they will be.
Is there a way to accomplish this?
Edit: Just to help clarify what I am trying to achieve. I have a list of functions such as
HoldForm[Plus[3,Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]],
HoldForm[Plus[7,Times[2,Divide[16,Subtract[9,Plus[4,1]]]]]],
HoldForm[Plus[3,Times[7,9],29]]
I need to remove the first element from the list because it is a function that divides by 1 (and subtracts 0), making is only trivially different from the 3rd element of the list. After removing the first function I want to display the output like this
$7+2 frac169-(4+1)$,$3+7times 9+29$
list-manipulation functions replacement symbolic
New contributor
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
4 hours ago
1
What would be a result ofSubtract[9,Plus[4,5]]
ifPlus
is not included in your list?
â Kubaâ¦
4 hours ago
In my example, the whole thing should be removed from my list of functions. This is becauseSubtract[9,Plus[4,5]]
will evaluate to 0 and so it means the example is trivial as there will be another function in the list that is the same except it won'tSubtract[0]
â RedPython
3 hours ago
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
3 hours ago
Thanks for the advice Szabolcs. Advice appreciated. I have looked up how to do it and will ensure I follow your advice going forward.
â RedPython
3 hours ago
 |Â
show 6 more comments
up vote
5
down vote
favorite
up vote
5
down vote
favorite
I have a list of functions, each containing none or more of the functions Plus
, Times
, Subtract
and Divide
. They could be in any arrangement and with any numbers. This is one such example.
HoldForm[Plus[3+Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]]*
There is an error here, The above should read: Plus[3,Times[7
The numbers can be any positive integer. I need to calculate just the Divide
and Subtract
functions to find out if they evaluate to 1 or 0 respectively as I consider functions in the list that have this property trivial and I want to filter them out.
I am somewhat a beginner with Wolfram/Mathematica code and I have been attempting to extract the Divide
and Subtract
parts as a list and then calculating just them parts but so-far my attempts at solving this have been totally unfruitful, partly because I can't know beforehand where the Divide
or Subtract
functions are in the function or how deep they will be.
Is there a way to accomplish this?
Edit: Just to help clarify what I am trying to achieve. I have a list of functions such as
HoldForm[Plus[3,Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]],
HoldForm[Plus[7,Times[2,Divide[16,Subtract[9,Plus[4,1]]]]]],
HoldForm[Plus[3,Times[7,9],29]]
I need to remove the first element from the list because it is a function that divides by 1 (and subtracts 0), making is only trivially different from the 3rd element of the list. After removing the first function I want to display the output like this
$7+2 frac169-(4+1)$,$3+7times 9+29$
list-manipulation functions replacement symbolic
New contributor
I have a list of functions, each containing none or more of the functions Plus
, Times
, Subtract
and Divide
. They could be in any arrangement and with any numbers. This is one such example.
HoldForm[Plus[3+Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]]*
There is an error here, The above should read: Plus[3,Times[7
The numbers can be any positive integer. I need to calculate just the Divide
and Subtract
functions to find out if they evaluate to 1 or 0 respectively as I consider functions in the list that have this property trivial and I want to filter them out.
I am somewhat a beginner with Wolfram/Mathematica code and I have been attempting to extract the Divide
and Subtract
parts as a list and then calculating just them parts but so-far my attempts at solving this have been totally unfruitful, partly because I can't know beforehand where the Divide
or Subtract
functions are in the function or how deep they will be.
Is there a way to accomplish this?
Edit: Just to help clarify what I am trying to achieve. I have a list of functions such as
HoldForm[Plus[3,Times[7,Subtract[9,Plus[4,5]],Divide[29,Subtract[4,3]]]]],
HoldForm[Plus[7,Times[2,Divide[16,Subtract[9,Plus[4,1]]]]]],
HoldForm[Plus[3,Times[7,9],29]]
I need to remove the first element from the list because it is a function that divides by 1 (and subtracts 0), making is only trivially different from the 3rd element of the list. After removing the first function I want to display the output like this
$7+2 frac169-(4+1)$,$3+7times 9+29$
list-manipulation functions replacement symbolic
list-manipulation functions replacement symbolic
New contributor
New contributor
edited 2 hours ago
New contributor
asked 4 hours ago
RedPython
1263
1263
New contributor
New contributor
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
4 hours ago
1
What would be a result ofSubtract[9,Plus[4,5]]
ifPlus
is not included in your list?
â Kubaâ¦
4 hours ago
In my example, the whole thing should be removed from my list of functions. This is becauseSubtract[9,Plus[4,5]]
will evaluate to 0 and so it means the example is trivial as there will be another function in the list that is the same except it won'tSubtract[0]
â RedPython
3 hours ago
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
3 hours ago
Thanks for the advice Szabolcs. Advice appreciated. I have looked up how to do it and will ensure I follow your advice going forward.
â RedPython
3 hours ago
 |Â
show 6 more comments
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
4 hours ago
1
What would be a result ofSubtract[9,Plus[4,5]]
ifPlus
is not included in your list?
â Kubaâ¦
4 hours ago
In my example, the whole thing should be removed from my list of functions. This is becauseSubtract[9,Plus[4,5]]
will evaluate to 0 and so it means the example is trivial as there will be another function in the list that is the same except it won'tSubtract[0]
â RedPython
3 hours ago
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
3 hours ago
Thanks for the advice Szabolcs. Advice appreciated. I have looked up how to do it and will ensure I follow your advice going forward.
â RedPython
3 hours ago
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
4 hours ago
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
4 hours ago
1
1
What would be a result of
Subtract[9,Plus[4,5]]
if Plus
is not included in your list?â Kubaâ¦
4 hours ago
What would be a result of
Subtract[9,Plus[4,5]]
if Plus
is not included in your list?â Kubaâ¦
4 hours ago
In my example, the whole thing should be removed from my list of functions. This is because
Subtract[9,Plus[4,5]]
will evaluate to 0 and so it means the example is trivial as there will be another function in the list that is the same except it won't Subtract[0]
â RedPython
3 hours ago
In my example, the whole thing should be removed from my list of functions. This is because
Subtract[9,Plus[4,5]]
will evaluate to 0 and so it means the example is trivial as there will be another function in the list that is the same except it won't Subtract[0]
â RedPython
3 hours ago
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
3 hours ago
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
3 hours ago
Thanks for the advice Szabolcs. Advice appreciated. I have looked up how to do it and will ensure I follow your advice going forward.
â RedPython
3 hours ago
Thanks for the advice Szabolcs. Advice appreciated. I have looked up how to do it and will ensure I follow your advice going forward.
â RedPython
3 hours ago
 |Â
show 6 more comments
2 Answers
2
active
oldest
votes
up vote
5
down vote
exp = Inactivate[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
Inactive[Plus][3 + 7*(9 - (4 + 5))*29]
An alternative way to evaluate completely subexpressions with head Divide
or Subtract
using RuleCondition
(from WReach's answer in the q/a linked in Sjoerd's answer):
HoldForm[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]] /.
e : _Subtract | _Divide :> RuleCondition[e]
+(3 + 7 0 29)
add a comment |Â
up vote
4
down vote
The answer of kglr works if you only want to do the evaluations associated with Divide
and Subtract
. If instead you want every subexpression with these head to evaluate completely, use the following trick:
Hold[
Plus[
3 + Times[7, Subtract[9, Plus[4, 5]],
Divide[29, Subtract[4, 3]]]]
] /.
expr : (_Divide
See also the following answer:
Replacement inside held expression
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
exp = Inactivate[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
Inactive[Plus][3 + 7*(9 - (4 + 5))*29]
An alternative way to evaluate completely subexpressions with head Divide
or Subtract
using RuleCondition
(from WReach's answer in the q/a linked in Sjoerd's answer):
HoldForm[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]] /.
e : _Subtract | _Divide :> RuleCondition[e]
+(3 + 7 0 29)
add a comment |Â
up vote
5
down vote
exp = Inactivate[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
Inactive[Plus][3 + 7*(9 - (4 + 5))*29]
An alternative way to evaluate completely subexpressions with head Divide
or Subtract
using RuleCondition
(from WReach's answer in the q/a linked in Sjoerd's answer):
HoldForm[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]] /.
e : _Subtract | _Divide :> RuleCondition[e]
+(3 + 7 0 29)
add a comment |Â
up vote
5
down vote
up vote
5
down vote
exp = Inactivate[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
Inactive[Plus][3 + 7*(9 - (4 + 5))*29]
An alternative way to evaluate completely subexpressions with head Divide
or Subtract
using RuleCondition
(from WReach's answer in the q/a linked in Sjoerd's answer):
HoldForm[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]] /.
e : _Subtract | _Divide :> RuleCondition[e]
+(3 + 7 0 29)
exp = Inactivate[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
Inactive[Plus][3 + 7*(9 - (4 + 5))*29]
An alternative way to evaluate completely subexpressions with head Divide
or Subtract
using RuleCondition
(from WReach's answer in the q/a linked in Sjoerd's answer):
HoldForm[Plus[3 + Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]] /.
e : _Subtract | _Divide :> RuleCondition[e]
+(3 + 7 0 29)
edited 3 hours ago
answered 4 hours ago
kglr
160k8184384
160k8184384
add a comment |Â
add a comment |Â
up vote
4
down vote
The answer of kglr works if you only want to do the evaluations associated with Divide
and Subtract
. If instead you want every subexpression with these head to evaluate completely, use the following trick:
Hold[
Plus[
3 + Times[7, Subtract[9, Plus[4, 5]],
Divide[29, Subtract[4, 3]]]]
] /.
expr : (_Divide
See also the following answer:
Replacement inside held expression
add a comment |Â
up vote
4
down vote
The answer of kglr works if you only want to do the evaluations associated with Divide
and Subtract
. If instead you want every subexpression with these head to evaluate completely, use the following trick:
Hold[
Plus[
3 + Times[7, Subtract[9, Plus[4, 5]],
Divide[29, Subtract[4, 3]]]]
] /.
expr : (_Divide
See also the following answer:
Replacement inside held expression
add a comment |Â
up vote
4
down vote
up vote
4
down vote
The answer of kglr works if you only want to do the evaluations associated with Divide
and Subtract
. If instead you want every subexpression with these head to evaluate completely, use the following trick:
Hold[
Plus[
3 + Times[7, Subtract[9, Plus[4, 5]],
Divide[29, Subtract[4, 3]]]]
] /.
expr : (_Divide
See also the following answer:
Replacement inside held expression
The answer of kglr works if you only want to do the evaluations associated with Divide
and Subtract
. If instead you want every subexpression with these head to evaluate completely, use the following trick:
Hold[
Plus[
3 + Times[7, Subtract[9, Plus[4, 5]],
Divide[29, Subtract[4, 3]]]]
] /.
expr : (_Divide
See also the following answer:
Replacement inside held expression
edited 2 hours ago
answered 3 hours ago
Sjoerd Smit
2,670414
2,670414
add a comment |Â
add a comment |Â
RedPython is a new contributor. Be nice, and check out our Code of Conduct.
RedPython is a new contributor. Be nice, and check out our Code of Conduct.
RedPython is a new contributor. Be nice, and check out our Code of Conduct.
RedPython 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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f181814%2fevaluate-only-part-of-a-function%23new-answer', 'question_page');
);
Post as a guest
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
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
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
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
4 hours ago
1
What would be a result of
Subtract[9,Plus[4,5]]
ifPlus
is not included in your list?â Kubaâ¦
4 hours ago
In my example, the whole thing should be removed from my list of functions. This is because
Subtract[9,Plus[4,5]]
will evaluate to 0 and so it means the example is trivial as there will be another function in the list that is the same except it won'tSubtract[0]
â RedPython
3 hours ago
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
3 hours ago
Thanks for the advice Szabolcs. Advice appreciated. I have looked up how to do it and will ensure I follow your advice going forward.
â RedPython
3 hours ago