Hashing Code II Index   <<   >>

 

#define DO(n,stmts)      {I i,_n=(n); for(i=0;i<_n;++i){stmts;}}
#define HI(n,x,y,stmts)  DO(n, h=HF(y[i]); while(*h>=0&&x[*h]!=y[i])if(hm==++h)h=h0; stmts;);
#define HS(n,  y,stmts)  DO(n, h=HF(y[i]); while(*h!=M&&  *h !=y[i])if(hm==++h)h=h0; stmts;);


i.    x⍳y      HI(xn,x,x, if(*h<0)*h=i;           );
               HI(yn,x,y, *z++=*h<0?xn:*h;        );

i.~   x⍳x      HI(xn,x,x, if(*h<0)*h=i; *z++=*h;  );


e.~   y∊x      HS(xn,  x, if(*h==M)*h=x[i];       );
               HS(xn,  y, *z++=*h!=M;             );

~.    ∪x       HS(xn,  x, if(*h==M)*h=*z++=x[i];  );
~:    ≠x       HS(xn,  x, if(*z++=*h==M)*h=x[i];  );
#@~.  (≢∪)x    HS(xn,  x, if(*h==M){*h=x[i]; ++c;});