From 95b1beb9db4da8ee76d24ccece9c696484445c36 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 24 Dec 2022 17:07:25 +0200 Subject: [PATCH] =?UTF-8?q?native=20high-rank=20=E2=88=8A=20&=20=E2=8A=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/search.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) 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);