Q:Proper use of Evaluate[] inside Which[]

• To: mathgroup at smc.vnet.net
• Subject: [mg14400] Q:Proper use of Evaluate[] inside Which[]
• From: sergio_r at my-dejanews.com
• Date: Sun, 18 Oct 1998 15:10:05 -0400
• Organization: Deja News - The Leader in Internet Discussion
• Sender: owner-wri-mathgroup at wolfram.com

```(*---------------------------------------------------------------------------
Hello:
How can I force the evaluation of an expression
inside Which? For instance, the following piece
of code:
----------------------------------------------------------------------------*)
Clear[Xa, Xb, iIndex, jIndex, X, g, ff, x, f, k];

Xa = 0.0; Xb = 3.0; jIndex = 3; iIndex = 1;
X[1] = Xa; X[i_] := X[i-1] + (Xb - Xa)/(jIndex-1)
g[j_][x_] := (x-X[j])*(x-j)

ff[i_][j_][x_] := Which[
(i == 1 && j != 1),
Which[ x >= Evaluate[X[j-1]] && x <
Evaluate[X[j]],
Evaluate[g[j][x]],
x >= Evaluate[X[j]] && x <=
Evaluate[X[j+1]],
Evaluate[g[i][x]],
True, 0],
True, 0];
k = 0;
Do[For[i=1, i<=(iIndex + 2), i=i+1,
k = k + 1;
f[k][x_] := Evaluate[ff[i][j][x]]],
{j,1,(jIndex-1)}]

?f

(*---------------------------------------------------------------------------
produces the following output:

In[1]:= \$Version[]
Out[1]= Solaris 3.0 (November 22, 1996)[]

In[2]:= << test.m
Global`f

f[1][x_] := 0
f[2][x_] := 0
f[3][x_] := 0
f[4][x_] := Which[x >= 0. && x < 1.5, (-2 + x)*(-1.5 + x),
x >= Evaluate[X[2]] && x <= Evaluate[X[2 + 1]], (-1 + x)*(0. + x),
True, 0] f[5][x_] := 0
f[6][x_] := 0

How come Evaluate[] does not evaluate the second condition?
How can I overcome this? I would like to get something like:

f[4][x_] := Which[x >= 0.  && x <  1.5, (-2 + x)*(-1.5 + x),
x >= 1.5 && x <= 3.0, (-1 + x)*(0. + x),
True, 0]
Sergio Rojas
E-mail: sergio at scisun.sci.ccny.cuny.edu

PS. Mathematica 2.2 output for this code is:

In[10]:= \$Version
Out[10]= SPARC 2.2 (February 5, 1994)

In[11]:=  << test.m
Global`f

f[1][x_] := 0
f[2][x_] := 0
f[3][x_] := 0
f[4][x_] := Which[x >= Evaluate[X[2 - 1]] && x < Evaluate[X[2]],
(-2 + x)*(-1.5 + x), x >= Evaluate[X[2]] && x <= Evaluate[X[2 + 1]],
(-1 + x)*(0. + x), True, 0]
f[5][x_] := 0
f[6][x_] := 0
----------------------------------------------------------------------------*)

-----------== Posted via Deja News, The Discussion Network ==----------