HP Forums
is AND broken? - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: is AND broken? (/thread-4916.html)



is AND broken? - ji3m - 10-11-2015 01:23 AM

I have very mysterious problems with the AND function in a program if statement.

The program misbehaves until i remove the AND and use two ifs.

E.e

IF ((expr1) AND (expr2)) THEN ....

fails with bad argument error somewhere in the code.

IF (expr1) THEN
IF (expr2) THEN
......

make the gremlins go away.

Seems odd.


RE: is AND broken? - Han - 10-11-2015 05:06 AM

(10-11-2015 01:23 AM)ji3m Wrote:  I have very mysterious problems with the AND function in a program if statement.

The program misbehaves until i remove the AND and use two ifs.

E.e

IF ((expr1) AND (expr2)) THEN ....

fails with bad argument error somewhere in the code.

IF (expr1) THEN
IF (expr2) THEN
......

make the gremlins go away.

Seems odd.

You can place a DEBUG; statement right before where you think the error occurs and then run the program and this will pull up the debugger so you can see the real cause.


RE: is AND broken? - Didier Lachieze - 10-11-2015 05:35 AM

This has been discussed here.


RE: is AND broken? - toml_12953 - 10-14-2015 02:09 AM

(10-11-2015 01:23 AM)ji3m Wrote:  I have very mysterious problems with the AND function in a program if statement.

The program misbehaves until i remove the AND and use two ifs.

E.e

IF ((expr1) AND (expr2)) THEN ....

fails with bad argument error somewhere in the code.

IF (expr1) THEN
IF (expr2) THEN
......

make the gremlins go away.

Seems odd.

If expr2 has an error in it, the second example works because the IF never gets evaluated if the first IF is false. HPPL, as in most forms of BASIC, evaluates all expressions in an AND statement. There's no early exit if the first part of the AND is false.

Example:
Code:
IF 4<2 AND 1/0 >3 THEN
<do something here>
END;
will fail because 1/0 is illegal.
Code:

IF 4<2 THEN
  IF 1/0>3 THEN
    <do something here>
  END;
END;

will work because the 1/0 never gets evaluated.