MathGroup Archive 2007

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

Search the Archive

Re: Controlling evaluation

  • To: mathgroup at
  • Subject: [mg83729] Re: [mg83706] Controlling evaluation
  • From: Carl Woll <carlw at>
  • Date: Thu, 29 Nov 2007 06:24:46 -0500 (EST)
  • References: <>

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
>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: TwoAxisListPlot for V6?
  • Next by Date: Re: Epilog with 3 dimensional graphics primitives
  • Previous by thread: Controlling evaluation
  • Next by thread: Re: Controlling evaluation