MathGroup Archive 2007

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

Search the Archive

Controlling evaluation

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

Perhaps a related more general question:
how do we block
while allowing evaluation of x, and y ?
Thank you in advance for any comment

  • Prev by Date: Re: Mathematica 6.0 Desperation
  • Next by Date: Re: MapThread over ragged arrays
  • Previous by thread: Can't start Mathematica 5
  • Next by thread: Re: Controlling evaluation