Evaluate Only Part of a Function

The name of the pictureThe name of the pictureThe name of the pictureClash 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$










share|improve this question









New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



















  • 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]] 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 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














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$










share|improve this question









New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



















  • 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]] 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 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












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$










share|improve this question









New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











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






share|improve this question









New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 hours ago





















New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 4 hours ago









RedPython

1263




1263




New contributor




RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






RedPython is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











  • 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]] 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 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






  • 1




    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 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










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)







share|improve this answer





























    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






    share|improve this answer






















      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',
      convertImagesToLinks: false,
      noModals: false,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );






      RedPython is a new contributor. Be nice, and check out our Code of Conduct.









       

      draft saved


      draft discarded


















      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






























      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)







      share|improve this answer


























        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)







        share|improve this answer
























          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)







          share|improve this answer














          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)








          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 3 hours ago

























          answered 4 hours ago









          kglr

          160k8184384




          160k8184384




















              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






              share|improve this answer


























                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






                share|improve this answer
























                  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






                  share|improve this answer














                  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







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 2 hours ago

























                  answered 3 hours ago









                  Sjoerd Smit

                  2,670414




                  2,670414




















                      RedPython is a new contributor. Be nice, and check out our Code of Conduct.









                       

                      draft saved


                      draft discarded


















                      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.













                       


                      draft saved


                      draft discarded














                      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













































































                      Comments

                      Popular posts from this blog

                      Long meetings (6-7 hours a day): Being “babysat” by supervisor

                      Is the Concept of Multiple Fantasy Races Scientifically Flawed? [closed]

                      Confectionery