Metropoli BBS
VIEWER: reduce.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1996 by Thomas Glen Smith.  All Rights Reserved.*/
/* reduce APL2 V1.0.0 **************************************************
* Call format is - c=reduce(operator,identity,operand,axis);           *
* Reduce may be most easily understood by first looking at how it works*
* on a vector, e.g. "1 2 3 4 5".  It obtains a result by applying the  *
* specified operator, e.g. plus, in a fashion equivalent to the        *
* expression "1+2+3+4+5", producing 15 for an answer.  Reduce  does the*
* operation right-to-left, however, so the minus operator applied to   *
* "1 2 3 4 5" produces the answer 3, not -13.                          *
*                                                                      *
* For an argument that is a scalar or vector, the result is a scalar.  *
* For arguments of higher rank, n, the result is of rank n-1.          *
* Arguments of rank 2 or more are treated as collections of vectors,   *
* the axis argument determining how the vectors are constructed.       *
* Suppose m is a 3-by-4 matrix, as follows:  1   2   3   4             *
*                                            5   6   7   8             *
*                                            9  10  11  12             *
*                                                                      *
* reduce(plus,NIL,m,1) produces:  15 18 21 24                          *
* reduce(plus,NIL,m,2) produces:  10 26 42                             *
*                                                                      *
* The identity argument is a pointer to a double floating point value  *
* that is used only for reduction of an empty vector, the result being *
* the identity value.  For plus and minus, the identity element is 0.  *
* For multiplication and division it is 1.                             *
*                                                                      *
* in the case of a scalar or vector of length 1, the result is the     *
* item itself.                                                         *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb reduce(oper,identity,rite,axis)
double (*oper)(); /* operator */
double *identity; /* identity value */
Aplcb rite; /* operand */
int axis; /* axis of reduction */
{
     Reducesb;

     return(reducesb(1,oper,identity,rite,axis));
}
[ RETURN TO DIRECTORY ]