Re: Controlling evaluation
- To: mathgroup at smc.vnet.net
- Subject: [mg83729] Re: [mg83706] Controlling evaluation
- From: Carl Woll <carlw at wolfram.com>
- Date: Thu, 29 Nov 2007 06:24:46 -0500 (EST)
- References: <200711281047.FAA18341@smc.vnet.net>
magma wrote: >I am building a package and I need to programmatically construct >expressions . >At a certain point I have > >arg1 = {a, b, c}; (* some list *) >arg2 = {d, e, f}; (* some other list *) >samelistQ[list1_List, list2_List] := > list1 === list2 (* some logic function *) > >Now I want to construct an expression like > >Condition[expr, samelistQ[arg1, arg2]] > >with arg1 and arg2 evaluated, but with samelist[...] not evaluated. >In other words, I want to obtain exactly this > >Condition[expr, samelistQ[{a, b, c}, {d, e, f}]] > >where the 2 args have been evaluated, but samelistQ[...] appears >always unevaluated > > A couple possibilities: With[{x=arg1, y=arg2}, Condition[expr, samelistQ[x,y]]] Condition[expr, samelistQ[##]]& @@ {arg1,arg2} Carl Woll Wolfram Research >What is expr is not important, just leave it unassigned. >The problem is that Condition blocks the evaluation of arg1 and arg2 >and of samelistQ. > >Now, doing > >Condition[expr, samelistQ[arg1 // Evaluate, arg2 // Evaluate]] > >does not work, because Evaluate does not disappear. >So what to do? I tried Hold, ReleaseHold, ect, but it didn't work. > >This is how I solved it > >Condition @@ List[expr, pp[arg1, arg2]] /. pp -> samelistQ > >where pp is an unassigned symbol. >My question: isn't there a better way, using the functions which are >supposed to control evaluation (Hold, Evaluate, ect) to achieve this >result? > >Perhaps a related more general question: >how do we block >f[x,y] >while allowing evaluation of x, and y ? >Thank you in advance for any comment > >
- References:
- Controlling evaluation
- From: magma <maderri2@gmail.com>
- Controlling evaluation