Expressions are used in:
The general form of an expression is one of the following:
Form:  Examples:  
term  42 'red' isPrime.x.y 

prefixOperator term   42 \ isPrime 

term operator term 

Expression terms can be one of the following:
string  'open sesame' "This isn't a numeric value" 
hexadecimal string  '2 2bad'x 
binary string  '1 01'b 
symbol  42 1.23e+42 ' + 7.9E42 ' first_name isPrime.x.y isPrime. 
function result  left( 'abracadabra', 4 ) 
parenthesized expression  (2 + 2) (2 + (6 * 3)) ('your name is' name) 
Furthermore, wherever a term can appear an expression can appear!
Here is an assignment instruction with an intricate expression:
vector = left( ' ', 8 * day1no )  , overlay( ' > 'right( dayofmon, 2 )' < ' , , left( ' 1 2 3 4 5 '  , ' 6 7 8 9 10 '  , ' 11 12 13 14 15 '  , ' 16 17 18 19 20 '  , ' 21 22 23 24 25 '  , ' 26 27 28 29 30 '  , ' 31 ', (daysinmo * 8) ), , 1 + ((dayofmon1) * 8) ) 
(space)  date() time()  the space between the functions is an operator 
(abuttal)  date()  time()  the '' operator is an explicit abuttal operator 
(abuttal)  date()' at 'time()  the quoted string is implicitly concatenated to the adjacent terms 
Rexx has two fundamental string concatenation operators.
Click here for a detailed description of string concatenation operators.
Numeric terms can be processed with the following operators:
+  Add  21 + 21  
  Subtract  44  2  
*  Multiply  6 * 7  
/  Divide  84 / 2  
%  Integer divide  85 % 2  
//  Remainder  42 // 50  similar to modulo but the result can be negative 
**  Power (exponent)  2 ** 4  
Prefix +  (0 + number)  + 42  
Prefix   (0  number)   42 
Comparison operators compare two terms. The result of the comparison is '1' when the terms are equal, and '0' otherwise. There are two types of comparison operators  strict and normal.
In normal comparisons, strings are compared for the length of the shorter term, and trailing spaces are ignored. The collating order of characters is implementationdependent. There are significant differences between the ordering of characters in Ascii environments, versus EBCDIC.
When both terms in a normal comparison are numeric, then a numeric comparison is performed. '7' is less than '11' in a normal comparison.
In strict comparisons, trailing spaces are significant. Strict comparisons always compare string values, even though both terms are numeric. '7' is greater than '11' in a strict comparison!
=  equal 
¬=, \=, ><, <>  not equal 
>  greater than 
<  less than 
>=, ¬<, \<  greater than or equal; not less than 
<=, ¬>, \>  less than or equal; not greater than 
Note: The ¬ operator character may be absent in Ascii implementations. The backslash character (\) is now preferred.
Strict comparison operators are similar to normal comparison operators, but has doubled operators.
==  strictly equal 
¬==, \==  strictly not equal 
>>  strictly greater than 
<<  strictly less than 
>>=, ¬<<, \<<  strictly greater than or equal; strictly not less than 
<<=, ¬>>, \>>  strictly less than or equal; strictly not greater than 
Logical operators transform the boolean sense of one or two terms. A term is considered to be false if it is strictly equal to '0'. A term is considered to be true if it is strictly equal to '1'. Any values other than '0' or '1' are invalid, and cause error #34 (logical value not 0 or 1) to be raised.
&  And  returns '1' when both terms are true, and '0' otherwise 
  Or  returns '1' when either term is true, and '0' otherwise 
&&  Exclusive or  returns '1' when one of the terms is true (but not both), and '0' otherwise 
Prefix ¬, Prefix \  Logical not  returns '1' when the term is '0', and '0' when the term is '1'. 
Boolean expressions are used in the condition clauses of IF, DO, and WHEN instructions,
As mentioned above, the result of a boolean expression is considered to be false if it is strictly equal to '0'. A term is considered to be true if it is strictly equal to '1'. Any values other than '0' or '1' are invalid, and cause error #34 (logical value not 0 or 1) to be raised.
Some examples are helpful.
if number < limit then ...  ok, hopefully both variables have numeric values 
when result then ...  oops, what if result is not exactly '0' or '1' 
do while lines( )  oops, you probably want to do: lines( ) > 0 instead 