I am not able to understand the following behavior If I write
> h:= proc(x): > if type(x, realcons) then > if x<=Pi then x^2 > else x-1 > fi; > else > 'h(x)'; > fi; > end:
I get the error message
> h(2); Error, (in h) cannot evaluate boolean: 2-Pi <= 0
While if I write
> h:= proc(x): > if type(x, realcons) then > if is(x<=Pi) then x^2 > else x-1 > fi; > else > 'h(x)'; > fi; > end:
I get
> h(2); 4
I thought that writing if x<=Pi or if is(x<=Pi)
was exactly the same, clearly I was
wrong can someone explain me the difference
No, "if x <= Pi" and "if is(x <= Pi)"
are not the same, and you have found a perfect
example of this.
"if" by itself only does a very low-level Boolean evaluation of the condition. It can use
< and <=
to compare integers, fractions and floats but that’s about it. It can’t even
handle algebraic constants, e.g. if 2 < sqrt(10) then
... will produce an error.
Moreover, if a=b then ...
with symbolic expressions only succeeds if a is literally the
same as b, e.g. if (x+y)^2 = x^2 + 2*x*y + y^2 then A else B fi
will return
B.
"is" tries much harder to evaluate the condition, including the use of any assumptions that have been made.
x<=Pi
is just an expression that builds a data structure for some other Maple facility to
interpret. If you use it in a boolean context (such as an "if" statement) then Maple implicitly
applies evalb
to it, but can only evaluate it to a boolean if both sides of the inequality are
numerical. In your example, x has a numerical value (namely 2) but Pi is just a symbol; Pi
only acquires a numerical value if a numerical evaluation function such as evalf is applied to
it.
By contrast, the function "is" takes a more mathematical view and tries to perform the necessary simplification and evaluation. Here are some examples:
> x := 2: > x<=Pi; 2 <= Pi > evalb(x<=Pi); 2 - Pi <= 0 > evalf(x<=Pi); 2. <= 3.141592654 > evalb(evalf(x<=Pi)); true > is(x<=Pi); true
However, beware that comparing floating-point approximations is generally unreliable.
See pages 189-190
of my book "Computing with Maple" (http://centaur.maths.qmw.ac.uk/CwM/)
for a bit more detail on this general topic.