diff --git a/src/builtins/search.c b/src/builtins/search.c index 6e454e08..208a7019 100644 --- a/src/builtins/search.c +++ b/src/builtins/search.c @@ -40,11 +40,34 @@ static u64 elRange(u8 eltype) { return 1ull<<(1<nr? nr : pr-1); + n = toKCells(n, nr-cr); + p = toKCells(p, pr-cr); + assert(RNK(p)<=1); + return (B2){.n=n, .p=p}; + + #undef ARG_N + #undef ARG_P + #undef SYMB +} + extern B rt_indexOf; B indexOf_c2(B t, B w, B x) { - if (!isArr(w) || RNK(w)==0) thrM("⊐: 𝕨 must have rank at least 1"); - if (RNK(w)!=1) return c2(rt_indexOf, w, x); - + if (RARE(!isArr(w) || RNK(w)!=1)) { + B2 t = splitCells(x, w, true); + w = t.p; + x = t.n; + } if (!isArr(x) || RNK(x)==0) { usz wia = IA(w); B el = isArr(x)? IGetU(x,0) : x; @@ -123,7 +146,11 @@ B enclosed_0; B enclosed_1; extern B rt_memberOf; B memberOf_c2(B t, B w, B x) { - if (isAtm(x) || RNK(x)!=1) return c2(rt_memberOf, w, x); + if (isAtm(x) || RNK(x)!=1) { + B2 t = splitCells(w, x, false); + w = t.n; + x = t.p; + } if (isAtm(w)) goto single; ur wr = RNK(w);