[ Logical Operands ]
[ Relational Operands ]
[ Logical and Relational Expressions ]

Logical and relational operands are used in questions that have a true/false answer. Expressions composed of logical and relational operands play a central role in ALADDIN programming constructs for the branching and looping control of problem solving procedure.

ALADDIN supports three logical operands on physical quantities. They are:

OPERAND DESCRIPTION ==================================================== || Logical "or" && Logical "and" ! Logical "not" ====================================================

Expressions involving logical operands will evaluate to either true or false. In keeping with other programming languages, "true" is represented by a non-zero number, and "false" by zero.

** Example 1 : ** In our first example,

print "2 && 3 : ", 2 && 3, " (true) \n"; print "2 && 0 : ", 2 && 0, " (false) \n"; print "2 || 0 : ", 2 || 0, " (true) \n"; print "0 || 0 : ", 0 || 0, " (false) \n"; print "!0 : ", !0 , " (true) \n"; print "!2 : ", !2 , " (false) \n";we simply evaluate logical operands for a variety of non-zero and zero number combinations. The generated output is:

2 && 3 : 1 (true) 2 && 0 : 0 (false) 2 || 0 : 1 (true) 0 || 0 : 0 (false) !0 : 1 (true) !2 : 0 (false)

** Example 2 : ** Logical operand also work on physical quantities having units.
For example, the script

print "2 cm && 3 cm : ", 2 cm && 3 cm, " (true) \n"; print "0 cm/sec && 3 cm^2 : ", 0 cm && 3 cm, " (false) \n";generates the output

2 cm && 3 cm : 1 (true) 0 cm/sec && 3 cm^2 : 0 (false)In each case, the logical operand in applied to the numerical component of the physical quantity alone (the units play no role in the operand's evaluation).

The relational operands are:

OPERAND DESCRIPTION ==================================================== == Test for "identical equality" > Greater than < Less than >= Greater than or equal to <= Less than or equal to ====================================================

** Example 3 : ** Expressions involving relational opeators may be
applied directly to physical quantities -- for example, the script:

print "2 cm == 3 cm : ", 2 cm == 3 cm, " (false) \n"; print "2 cm > 3 cm : ", 2 cm > 3 cm, " (false) \n"; print "2 cm < 3 cm : ", 2 cm < 3 cm, " (true) \n"; print "2 cm <= 3 cm : ", 2 cm <= 3 cm, " (true) \n";generates the output

2 cm == 3 cm : 0 (false) 2 cm > 3 cm : 0 (false) 2 cm < 3 cm : 1 (true) 2 cm <= 3 cm : 1 (true)

** Example 4 : ** A key feature of ALADDIN's units package is checking
of compatible units before a logical or relational operand is evaluated.
In the following script, we show how sets of mixed units may be used in
relational expressions -- the script of code:

print "20 cm == 200 mm : ", 20 cm == 200 mm, " (true) \n"; print "12 in > 1 ft : ", 12 in > 1 ft, " (false) \n"; print "36 in => 100 cm : ", 36 in > 100 cm, " (false) \n";generates the output

20 cm == 200 mm : 1 (true) 12 in > 1 ft : 0 (false) 36 in => 100 cm : 0 (false)Everything works as expected. Now suppose that we make a small error, as in the script:

x = 20 cm; y = 20 cm/sec; print "20 cm => 20 cm/sec : ", x > y , " (huh ???) \n";ALADDIN generates the output

20 cm => 20 cm/sec : FATAL ERROR >> "In Quantity_Gt() : Inconsistent Dimensions"and terminates its execution.

Of course logical and relational operands may be combined. Here are a couple of examples:

** Example 5 : ** The script

x = 20 cm > 10 cm; y = 20 sec >= 100 sec ; print "x : ", x , " (true) \n"; print "y : ", y , " (false) \n"; print "x || y : ", x || y , " (true) \n"; print "x && y : ", x && y , " (false) \n";generates the output

x : 1 (true) y : 0 (false) x || y : 1 (true) x && y : 0 (false)