apl: membership ∊, dyadic ⍳, without ~ (dyadic); 94/94 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-06 19:24:46 +00:00
parent 32efdfe4aa
commit ce72070d2a
2 changed files with 134 additions and 1 deletions

View File

@@ -753,3 +753,45 @@
((inner-shape (rest shape))
(inner-size (reduce * 1 (rest shape))))
(make-array inner-shape (take ravel inner-size))))))))
(define
apl-member
(fn
(a b)
(let
((a-ravel (if (scalar? a) (list (disclose a)) (get a :ravel)))
(b-ravel (if (scalar? b) (list (disclose b)) (get b :ravel)))
(a-shape (get a :shape)))
(make-array
a-shape
(map (fn (x) (if (index-of b-ravel x) 1 0)) a-ravel)))))
(define
apl-index-of
(fn
(v w)
(let
((v-ravel (if (scalar? v) (list (disclose v)) (get v :ravel)))
(w-ravel (if (scalar? w) (list (disclose w)) (get w :ravel)))
(w-shape (get w :shape))
(n (len (if (scalar? v) (list (disclose v)) (get v :ravel)))))
(make-array
w-shape
(map
(fn
(x)
(let
((i (index-of v-ravel x)))
(if i (+ i apl-io) (+ n apl-io))))
w-ravel)))))
(define
apl-without
(fn
(a b)
(let
((a-ravel (if (scalar? a) (list (disclose a)) (get a :ravel)))
(b-ravel (if (scalar? b) (list (disclose b)) (get b :ravel))))
(let
((result (filter (fn (x) (not (index-of b-ravel x))) a-ravel)))
(make-array (list (len result)) result)))))