F1(bool){A b,h;I j,*v; RZ(w); if(VERB&AT(w))R ADERIV(CBOOL, basis1,0L, 0L,0L,0L); RZ(w=vi(w)); v=AV(w); DO(AN(w), j=*v++; ASSERT(-16<=j&&j<16,EVINDEX)); GA(b,BOOL,64,2,0); *AS(b)=16; *(1+AS(b))=4; MC(AV(b),booltab,64L); RZ(h=cant2(apv(AR(w),0L,1L),from(w,b))); R fdef(CBOOL,VERB, bool1,bool2, w,0L,h, 0L, RMAXL,0L,0L); }
/* */ /* Verbs: From & Associates. See Hui, Some Uses of { and }, APL87. */ #include "j.h" F1(jtcatalog){PROLOG(0072);A b,*wv,x,z,*zv;C*bu,*bv,**pv;I*cv,i,j,k,m=1,n,p,*qv,r=0,*s,t=0,*u,wd; F1RANK(1,jtcatalog,0); if(!(AN(w)&&AT(w)&BOX+SBOX))R box(w); n=AN(w); wv=AAV(w); wd=(I)w*ARELATIVE(w); DO(n, x=WVR(i); if(AN(x)){p=AT(x); t=t?t:p; ASSERT(H**O(t,p),EVDOMAIN); RE(t=maxtype(t,p));}); RE(t=maxtype(B01,t)); k=bp(t); GA(b,t,n,1,0); bv=CAV(b); GATV(x,INT,n,1,0); qv=AV(x); GATV(x,BOX,n,1,0); pv=(C**)AV(x); RZ(x=apv(n,0L,0L)); cv=AV(x); DO(n, x=WVR(i); if(TYPESNE(t,AT(x)))RZ(x=cvt(t,x)); r+=AR(x); qv[i]=p=AN(x); RE(m=mult(m,p)); pv[i]=CAV(x);); GATV(z,BOX,m,r,0); zv=AAV(z); s=AS(z); DO(n, x=WVR(i); u=AS(x); DO(AR(x),*s++=*u++;);); for(i=0;i<m;i++){ bu=bv-k; DO(n, MC(bu+=k,pv[i]+k*cv[i],k);); DO(n, j=n-1-i; if(qv[j]>++cv[j])break; cv[j]=0;); RZ(*zv++=ca(b)); } EPILOG(z); } #define SETJ(jexp) {j=(jexp); if(0<=j)ASSERT(j<p,EVINDEX) else{j+=p; ASSERT(0<=j,EVINDEX);}} #define IFROMLOOP(T) \
static F1(jttrc){A bot,p,*v,x,y;B b;C*bv,c,ul,ll,*pv;I j,k,m,*s,xn,*xv,yn,*yv; RZ(w); s=AS(w); v=AAV(w); xn=s[0]; RZ(x=apv(xn,0L,0L)); xv=AV(x); yn=s[1]; RZ(y=apv(yn,0L,0L)); yv=AV(y); j=0; DO(xn, xv[i]=IC(v[j]); j+=yn;);