/*Copyright (C) 1996 by Thomas Glen Smith. All Rights Reserved.*/ /* relative APL2 V1.0.0 ************************************************ * Extends dyadic scalar functions such as and and or to conformable * * pairs of APL variables item-by-item. Arguments must either agree * * in shape, or one must have only a single element, which is repeatedly* * matched with elements of the other. If both arguments have one item,* * but differing ranks, the result has the higher rank. * * example: * * relative(and,litvect("0.0 0.0 1.0 1.0"), * * litvect("0.0 1.0 0.0 1.0")); * * produces the vector 0 0 0 1. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" Aplcb relative(oper,left,rite) int (*oper)(); /* operator */ Aplcb left,rite; /* operands */ { Dyadicm; Errstop; Matchok; extern int aplerr; double *dataout,*leftptr,*riteptr; int i,leftinc,riteinc; Aplcb out; if (!matchok(&left,&rite,APLNUMB)) return(NULL); /* m/b real */ out=dyadicm(left,rite, ((void **)&dataout),((void **)&leftptr),((void **)&riteptr), &leftinc,&riteinc,APLNUMB ); /* go build APLCB */ #include "dyadcom.h" }