1. Reason for my reflexion
Walter Pachl from Vienna found the error in the HEAPSORT implementation, which was included in my Album of algorithms and techniques:

Reflections, from Late Latin reflexio, on the programming are inspired by work on the Album of Algorithms and Techniques for Standard Rexx.
14th September 2001
I sent the first version of following article to comp.lang.rexx on 13th September
SHORT CIRCUITING IN REXX?
1. Reason for my reflexion Walter Pachl from Vienna found the error in the HEAPSORT implementation, which was included in my Album of algorithms and techniques:
The code of the SIFT procedure is invalid. It will cause the NOVALUE condition in course evaluation of the J<R & A.J<A.Jp1 expression
for R=N and J=N because variable A.Jp1, where Jp1=N+1, is
uninitialized for the array A.1,...,A.N
I returned to the original version of Niklaus Wirth's program in the
book Algorithms and data structure, Prentice Hall, 1986. This is
almost the same code but Wirth's program is written in Modula and
there is the difference between Rexx and Modula in evaluation of
expressions with logical operators AND and OR. In Rexx for A & B, A 
B both operands are always evaluated. In Modula this expressions are
evaluated in short circuit fashion, which means the second operand may
not be evaluated if the first operand can determine the outcome.
2. Normal logical AND, OR and short circuit logical AND, OR 2.1: According ANSI X3J18199X 7.4.8 the expression lhs & rhs ("&" is the normal logical AND operator) is evaluated
2.2: Likewise lhs  rhs ("" is the normal logical OR operator) is
evaluated
For evaluation of AND or OR we can use another, more effective
algorithm. I propose to denote this short circuit AND, OR operators as
"&*" and "*". The asterisk means: "zero or one next operand will
evaluated".
2.3: Then lhs &* rhs is evaluated
2.4: And likewise lhs * rhs is evaluated
3. Short curcuit AND, OR operators in presentday classic Rexx
Suppose that {S} is a (long) sequence of statements then equivalent code to code with "&*" and "*" follows (statements written on one row).
3.1: if A &* B then {S} (is equivalent to)
3.2: do while A &* B; {S}; end (is equivalent to)
3.3: if A * B then {S} (is equivalent to)
3.4: do while A * B; {S}; end (is equivalent to)
Review and notes
4. Good examples of using short circuit AND, OR 4.1: Now it is easy to translate from Modula to Rexx. In case HEAPSORT can be the result optimized, for example, thanks bypassing evaluation of A.J<A.Jp1 when J>=R.
Generalization:
 Facilitation of a translation of short circuiting from Ada, C, C++, GNU Pascal, Java, JavaScript, Lisp, Modula, Perl, VAX Pascal, VB.Net to Rexx and, of course, vice versa.  More effective code. 4.2: It gives us a possibility to express short circuiting in clear form. Some typical examples follow 4.2.1 if N <> 0 &* M / N > 0 then ... 4.2.2 if (I = 0) * (J = 1 / I) then ... 4.2.3
Note: the IQTEST function is online interactive longterm
computerized test.
4.2.4
Note: the RESULT_IQTEST function returns "" or a number, a number
is result of the last IQtest.
Generalization:
5. Good reasons for using of normal logical AND, OR 5.0: Of course, there are enormous amount of perfect working programs with "&" and "" around world. 5.1: Evaluation both operands can be useful in process debugging. 5.2: There are situations when both operands have to be evaluated. I.e. case when second operand contains side effect. See the following segment of program. This copies part of file Infile behind the line with value String to file Outfile. It may be useful. With "*" operand it is only an ordinary never ending loop.
6. Conclusion I found in literature 4 ways of using the logical operators AND, OR in programming languages 6.1  only the normal logical AND, OR operators which always evaluate both arguments (Rexx, Pascal, Visual Basic, WEbScript) 6.2  only the short circuit logical AND, OR (JavaScript, C, C++, Lisp, Modula, Perl) 6.3  the logical AND, OR are either normal or short circuit. It is given by compiler directive (GNU Pascal). 6.4  the logical normal and the logical short circuit AND, OR operators are used (Ada, VAX Pascal, Java, MATVEC, Octave, VB.Net) I think, from 4th and 5th chapters of this article is obvious that 6.4th way could be fine for uptodate languages rich with tradition as Rexx is.
7. Appendix 7.1 Thanks to Walter Pachl for inspiration. 7.2 The collection of articles "Comparing and Assessing Programming Languages Ada, C and Pascal" (editors A.R.Feuer, N.Gehani, PrenticeHall, 1984) includes example 4.2.1, solution 3.1, the warning of "J<R & A.J<A.Jp1"type (error in my old HEAPSORT) all in a critique of missing short circuiting in Pascal. 7.3 Martin Lafaix: "Proposals for NetRexx [20000704]"; chapter 5 Shortcircuit logical operators  brief suggestion of adding shortcircuit logical operators "&&&" and "" to NetRexx. It includes solution 3.3.3. BTW why I use "&*" and "*" instead "&&&" and ""? Because "&*", "*" are mignon ... 7.4 There is very interesting opposite view by Tom Christiansen in
(i.e. arguments against normal logical OR to Perl where only shortcircuit logical OR is used) 7.5 Following table shows symbols of logical operators in chosen programming languages:
And there is Mike Cowlishaw's reply in comp.lang.rexx 25 September 2001
Nice analysis. See also the short circuiting approach which I used in NetRexx,
at:
http://www2.hursley.ibm.com/nrl/nrslang.html#refsifw Mike Cowlishaw
Let me introduce this material here:
If and when
enhancements
The if clause in the if instruction
[NRL 80] and the when clause in the select instruction [NRL 108]
both have the same form and serve the same purpose, which is to test a value
either for being 1 or (for a when clause in a select case
construct) being equal to the case expression.
In both if and when clauses multiple expressions may now be specified, separated by commas. These are evaluated in turn from left to right, and if the result of any evaluation is 1 (or equals the case expression) then the test has succeeded and the instruction following the associated then clause is executed. Note that once an expression evaluation has resulted in a successful test, no further expressions in the clause are evaluated. So, for example, in:  assume 'name' is a string
then if name does not refer to an object it will compare equal to null and the say instruction will be executed without evaluating the second expression in the if clause.
1st July 2001
P+n trick by Walter Pachl. He sent me mail: ... My versions of your algorithms (SIN) that I did a couple of years ago applied the trick to compute the function to a precision of P+2 when a precision of P was asked for and rounded the result to precision P.
I did not do any error analysis  the +2 was rather chosen heuristically. The following program by Walter Pachl proofs that his technique is useful for the calculation of SIN function (of course, also for COS, LN, SQRT, etc.)
More, the program gives different results in different implementations. Hence it follows: First  Pachl's trick is the intelligent technique for debugging and using numerical programs! Secondly  For the SIN function (COS, LN, SQRT, ...) the statements
give the result with P significant digits for a "sufficient" large N, where 0 <= N.
Examples:

4th March 2001
W. Kavan introduces in his Mathematics Written in Sand the following example:
729**33.5 = 729**(67/2) = (243*3)**(67/2) =
= (3*3*3*3*3*3)**(67/2) = 3**(3*67) = 3**201 But recent handheld HewlettPackard calculators that accept and deliver data to 10 sig. dec. produce two results, 729**33.5 = 7.6841966E95 and 3**201 = 7.968419664E95 REPOWER(729,33.5,10) in version with row: if P = "" then P = 9; numeric digits P gives the result 7.96841935E+95. W. Kahan writes: ... here too would have required that intermediate calculations be carried to more than the 13 sig. dec. Hence I changed the code of the REPOWER function: if P = "" then P = 9; numeric digits P The following program
displays results, which the following table describes:

30th January 2000
I read the algorithm of J. M. Borwein and P. B. Borwein for computation of Pi; I wrote and debugged program PI (about 20 minutes); I ran this program for computation of the number Pi to thousand decimal places (about 90 seconds).
"Rexx code tends to run slowly.", hm ... we say speed of computation but we think speed of finding of answer, solution. 
26th February 2000
It isn't a trivially job to translate algorithms from various pseudocodes or programming languages as Ada, ALGOL, BASIC, C, FORTRAN, Modula, Pascal, PL/1, into the useful code in the Rexx language.
I translated the Donald E. Knuth's code for Winograd's matrix multiplication (Chapter 4.6.4, The Art of Computer Programming, Volume 2)
There is an old programmers rule: If some of the code does exactly the same thing, extract it from within loops. Coding of Winograd's algorithm was the hardest case of such extraction in my practice. This is the solution (schematic record).
I persuade of corectness of my solution by counting of multiplication operations. Their number has to be FORMAT(N/2,,0)*M*R + (N%2)*(M+R). 
27th February 2000
Does the RANDOM builtin function give the real good pseudorandom numbers? We can use the special tests as chisquare test or KolmogorovSmirnov test. But there are many more amusing ways.
E. Cesaro's theorem (1881) says: If A and B are integers chosen at random, the probability that GCD(A,B)=1 is 6/PI()**2. Note 1: 6/PI()**2=0.607927099...
You can try the following program as a test your routine for generation of pseudorandom numbers.
Results are included in the table for N=10,100,1000,10000,100000
And additional example. The average number of swaps for MODIFIND is
Where
For N = 1001; K = 500 and input array created by do J = 1 to N; A.J = RANDOM(1, 100000); end we will compute the average number of swaps after NR runs of the program.
