Evaluate Only Part of a Function
Clash Royale CLAN TAG#URR8PPP
up vote
7
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
 |Â
show 6 more comments
up vote
7
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
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
Sep 13 at 13:05
1
What would be a result ofSubtract[9,Plus[4,5]]
ifPlus
is not included in your list?
â Kubaâ¦
Sep 13 at 13:10
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
Sep 13 at 13:19
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
Sep 13 at 13:21
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
Sep 13 at 13:21
 |Â
show 6 more comments
up vote
7
down vote
favorite
up vote
7
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
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
edited Sep 13 at 14:34
asked Sep 13 at 13:01
RedPython
1384
1384
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
Sep 13 at 13:05
1
What would be a result ofSubtract[9,Plus[4,5]]
ifPlus
is not included in your list?
â Kubaâ¦
Sep 13 at 13:10
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
Sep 13 at 13:19
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
Sep 13 at 13:21
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
Sep 13 at 13:21
 |Â
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
Sep 13 at 13:05
1
What would be a result ofSubtract[9,Plus[4,5]]
ifPlus
is not included in your list?
â Kubaâ¦
Sep 13 at 13:10
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
Sep 13 at 13:19
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
Sep 13 at 13:21
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
Sep 13 at 13:21
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
Sep 13 at 13:05
Welcome to Mathematica.SE! Can you please put any code snippets in code blocks to improve the readability of the question?
â Szabolcs
Sep 13 at 13:05
1
1
What would be a result of
Subtract[9,Plus[4,5]]
if Plus
is not included in your list?â Kubaâ¦
Sep 13 at 13:10
What would be a result of
Subtract[9,Plus[4,5]]
if Plus
is not included in your list?â Kubaâ¦
Sep 13 at 13:10
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
Sep 13 at 13:19
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
Sep 13 at 13:19
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
Sep 13 at 13:21
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
Sep 13 at 13:21
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
Sep 13 at 13:21
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
Sep 13 at 13:21
 |Â
show 6 more comments
2 Answers
2
active
oldest
votes
up vote
5
down vote
accepted
Update: Selecting from a list expressions those that do not contain subexpressions that divide by 1 or subtract 0:
list = 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]];
condition = FreeQ[#, (s_Subtract /; s == 0) | (d_Divide /; d == 1), âÂÂ] &;
Select[list, condition]
7 + 2 16/(9 - (4 + 1)), 3 + 7 9 + 29
Original answer:
exp = Inactivate[Plus[3, Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
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
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]]]]
] /. _Subtract) :> With[x = expr, x /; True]
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
accepted
Update: Selecting from a list expressions those that do not contain subexpressions that divide by 1 or subtract 0:
list = 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]];
condition = FreeQ[#, (s_Subtract /; s == 0) | (d_Divide /; d == 1), âÂÂ] &;
Select[list, condition]
7 + 2 16/(9 - (4 + 1)), 3 + 7 9 + 29
Original answer:
exp = Inactivate[Plus[3, Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
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
accepted
Update: Selecting from a list expressions those that do not contain subexpressions that divide by 1 or subtract 0:
list = 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]];
condition = FreeQ[#, (s_Subtract /; s == 0) | (d_Divide /; d == 1), âÂÂ] &;
Select[list, condition]
7 + 2 16/(9 - (4 + 1)), 3 + 7 9 + 29
Original answer:
exp = Inactivate[Plus[3, Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
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
accepted
up vote
5
down vote
accepted
Update: Selecting from a list expressions those that do not contain subexpressions that divide by 1 or subtract 0:
list = 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]];
condition = FreeQ[#, (s_Subtract /; s == 0) | (d_Divide /; d == 1), âÂÂ] &;
Select[list, condition]
7 + 2 16/(9 - (4 + 1)), 3 + 7 9 + 29
Original answer:
exp = Inactivate[Plus[3, Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
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
Update: Selecting from a list expressions those that do not contain subexpressions that divide by 1 or subtract 0:
list = 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]];
condition = FreeQ[#, (s_Subtract /; s == 0) | (d_Divide /; d == 1), âÂÂ] &;
Select[list, condition]
7 + 2 16/(9 - (4 + 1)), 3 + 7 9 + 29
Original answer:
exp = Inactivate[Plus[3, Times[7, Subtract[9, Plus[4, 5]], Divide[29, Subtract[4, 3]]]]];
Activate[exp, Divide | Subtract]
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 Sep 13 at 18:24
answered Sep 13 at 13:10
kglr
162k8188387
162k8188387
add a comment |Â
add a comment |Â
up vote
5
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]]]]
] /. _Subtract) :> With[x = expr, x /; True]
See also the following answer:
Replacement inside held expression
add a comment |Â
up vote
5
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]]]]
] /. _Subtract) :> With[x = expr, x /; True]
See also the following answer:
Replacement inside held expression
add a comment |Â
up vote
5
down vote
up vote
5
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]]]]
] /. _Subtract) :> With[x = expr, x /; True]
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]]]]
] /. _Subtract) :> With[x = expr, x /; True]
See also the following answer:
Replacement inside held expression
edited Sep 13 at 14:14
answered Sep 13 at 13:21
Sjoerd Smit
2,790515
2,790515
add a comment |Â
add a comment |Â
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
Sep 13 at 13:05
1
What would be a result of
Subtract[9,Plus[4,5]]
ifPlus
is not included in your list?â Kubaâ¦
Sep 13 at 13:10
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
Sep 13 at 13:19
In that case why don't you just evaluate the whole thing and say that the result is 3?
â Szabolcs
Sep 13 at 13:21
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
Sep 13 at 13:21