MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Controlling evaluation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg83752] Re: Controlling evaluation
  • From: dh <dh at metrohm.ch>
  • Date: Thu, 29 Nov 2007 06:39:27 -0500 (EST)
  • References: <fiji6s$ikm$1@smc.vnet.net>


Hi,

Evaluate will evaluate its arguments if it appears as argument in a 

function with one of the Hold.. attributes. Consider:

Condition[expr, samelistQ[arg1 // Evaluate, arg2 // Evaluate]]

Condition has the attribute HoldAll. If samelistQ has the asme 

attribute, we therefore need to write Evaluate twice:

Condition[expr, Evaluate[samelist[Evaluate[arg1],Evaluate[arg1]]]

hope this helps, Daniel



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

> 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

> 




  • Prev by Date: Re: Controlling evaluation
  • Next by Date: Re: Epilog with 3 dimensional graphics primitives
  • Previous by thread: Re: Controlling evaluation
  • Next by thread: Mathematica 6 and system of matrix and scalar ODEs in NDSolve: NDSolve::nlnum