f := proc(x,y) if x>y then erf(x-y) else erf(y-x) fi end;

But when I try to plot this I get

> plot3d( f(x,y), x=-2..2, y=-2..2 ); Error, (in f) cannot evaluate boolean

**Answer:** The plot functions have normal evaluation rules.
What happens then is that before `plot3d ` is called,
is evaluated at *symbolic* and . I.e. we get

> f(x,y); Error, (in f) cannot evaluate boolean

Maple gives an error because it can't decide if when and
have no values. There are two ways of using the plotting commands
`plot` and `plot3d` as illustrated in the following example
for plotting the binomial function.

plot3d( binomial(n,k), n=-3..3, k=-3..3 ); plot3d( binomial, -3..3, -3..3 );

Most users are familiar with the first way, which is to plot a formula in two variables, in this case and . The second way allows you to plot a function given by a Maple procedure or an operator expression. Therefore the solution to the problem is

plot3d( f, -2..2, -2..2 );

Alternatively, one can use quotes to prevent from being evaluated before the plot routine is called thus

plot3d( 'f(x,y)', x=-2..2, y=-2..2 );

Note the frustrated user tried to get around the problem by trying to express this way

f := proc(x,y) if signum(x-y)=1 then erf(x-y) else erf(y-x) fi end;

This avoids the error but produced a different surprise. This ends up always plotting because

> signum(x-y); signum(x - y)

cannot be evaluted to for symbolic and hence the
`if` test always returns `false` !!

> if signum(x-y) = 1 then true else false fi; false > f(x,y); - erf(x - y)

Note Maple simplified to .
The solution again is to simply plot the function directly
`plot3d( f, -2..2, -2..2 );`
Of course, since we could have expressed
as a formula

plot3d( signum(x-y)*erf(x-y), x=-2..2, y=-2..2 );

gagin@thsun1.jinr.ru