Operators

Purpose The arithmetic and relational operators are used in the <expr> clause of the <eval> statement.
Escape Sequences The escape sequences used in XML and HTML for the < and > comparison operators must be used in your Superx++ program. This is because those characters are reserved in XML for use in delimiting XML elements. This means that you must use &lt; for the < operator and &gt; for the > operator.
Arithmetic Operators
+ Addition
Example #1 <eval>
   <expr>5 + 6</expr>
</eval>

yields 11

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) + 5) &lt; 5</expr>
</eval>

yields false

- Subtraction
Example #1 <eval>
   <expr>5 - 6</expr>
</eval>

yields -1

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) - 5) < 5</expr>
</eval>

yields false

* Multiplication
Example #1 <eval>
   <expr>5 * 6</expr>
</eval>

yields 30

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) * 5) &lt; 5</expr>
</eval>

yields false

/ Division
Example #1 <eval>
   <expr>30 / 6</expr>
</eval>

yields 5

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) / 5) &lt; 5</expr>
</eval>

yields true

% Modulus
Example #1 <eval>
   <expr>50 % 6</expr>
</eval>

yields 2

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) % 5) &lt; 5</expr>
</eval>

yields true

Relational Operators
&lt; true if left operand is less than right operand; else false
Example #1 <eval>
   <expr>5 &lt; 3</expr>
</eval>

yields false

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) &lt; 5</expr>
</eval>

yields true

&lt;= true if left operand is less than or equal to right operand; else false
Example #1 <eval>
   <expr>5 &lt;= 3</expr>
</eval>

yields false

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) &lt;= 5</expr>
</eval>

yields true

&gt; true if left operand is greater than right operand; else false
Example #1 <eval>
   <expr>5 &gt; 3</expr>
</eval>

yields true

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) &gt; 5</expr>
</eval>

yields false

&gt;= true if left operand is greater than or equal to right operand; else false
Example #1 <eval>
   <expr>5 &gt;= 3</expr>
</eval>

yields true

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) &gt;= 5</expr>
</eval>

yields false

= true if left operand is equal to right operand; else false
Example #1 <eval>
   <expr>5 = 3</expr>
</eval>

yields false

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) = 4</expr>
</eval>

yields true

!= or &lt;&gt; true if left operand is not equal to right operand; else false
Example #1 <eval>
   <expr>5 != 3</expr>
</eval>

<eval>
   <expr>5 &lt;&gt; 3</expr>
</eval>

yields true

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) != 4</expr>
</eval>

<eval>
   <parm type="string" name="a">atom</parm>
   <expr>len(a) &lt;&gt; 4</expr>
</eval>

yields false

and true if both operands are true; else false
Example #1 <eval>
   <expr>5 = 5 and 3 = 3</expr>
</eval>

yields true

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) + 5) &gt; 5 and true</expr>
</eval>

yields true

or true if either of the operands are true; else false
Example #1 <eval>
   <expr>5 = 5 or 3 = 3</expr>
</eval>

yields true

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) + 5) &lt; 5 or true</expr>
</eval>

yields true

xor true if only one of the operands is true; else false
Example #1 <eval>
   <expr>5 = 5 xor 3 = 3</expr>
</eval>

yields false

Example #2 <eval>
   <parm type="string" name="a">atom</parm>
   <expr>(len(a) + 5) &gt; 5 xor false</expr>
</eval>

yields true