Antonio,
Check the Attributes of the If statement.
Attributes[If]
{HoldRest, Protected}
The second and third arguments are not evaluated. Why is this? Because
sometimes the not choosen branch might be an invalid expression that would
lead to an error message. Only the choosen branch is evaluated. In your
example Mathematica can't determine if x < a so it chooses none of the
branches and none of them are evaluated.
You could overcome this by changing your definition.
H[x_, a_, b_] := If[x < a, Evaluate[ a + b], Evaluate[a - b]]
H[x, 0, 0]
If[x < 0, 0, 0]
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Antonio González [mailto:gonferh2o at esi.us.es]
To: mathgroup at smc.vnet.net
I have found some weird behaviors of Mathematica (5.0) related to the
simplifications of easy expressions.
Take, for instance the function
H[x_, a_, b_] = If[x < a, a + b, a - b]
If I try now to evaluate
H[x,0,0]
the result
If[x < 0, 0 + 0, 0 - 0]
(the values of a and b are irrelevat, a similar result is obtained, for
instance, with a=1, b= 2, or any integer, real or complex values). I
cannot force (at least in a simple way) Mathematica to make the addition
or the substraction. The action of Simplify or FullSimplify leaves the
expression unchanged while a Map of Simplify
MapAll[Simplify, H[x, 0, 0]]
produces
If[x < 0,
Simplify[Simplify[0] + Simplify[0]], Simplify[Simplify[
0] + Simplify[Simplify[-1] Simplify[0]]]]
Something even worse happens if a use values already defined. For instance
c = 0; d = 0; H[x_] = If[x < c, c + d, c - d]
produces
If[x < 0, c + d, c - d]
In this case, the addition is not necessary.
c = 0; d = 0; H[x_] = If[x < c, c, d]
leads to
If[x < 0, c, d]
Similar problems arise using the function Which.
Any explanation or help with this malfunction would be welcome.
--
Antonio
(Eliminar el agua para responder por e-mail - Remove water to reply by
e-mail)