If a procedure is to return one or more results, it can be given OUTPUT LOCALS. We have already seen examples of procedures with one output local variable, e.g. doublesum, above, and several others before that. Sometimes it is convenient to have a procedure produce more than one result.
For example, here is a procedure which takes a list of numbers and produces the sum of all the numbers, and their average, i.e. two results. The two results are left on the stack when the procedure exits.
define stats(numlist) ->(average, sum); 0 -> sum; lvars item; for item in numlist do item + sum -> sum; endfor; sum/length(numlist) -> average enddefine; vars s a; stats([ 1.0 3.5 5.3 9.62 ]) -> (a, s); s => ** 19.42 a => ** 4.855NB output locals are like ordinary local variables in that the values assigned to them during execution of the procedure are not available after the procedure has finished. E.g. if you try to access the values:
sum => ** <undef sum> average => ** <undef average>