apl: ⊆ partition — mask-driven split (+8)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 56s

- apl-partition: new partition where M[i]>M[i-1] (init prev=0);
  continue where M[i]≤prev∧M[i]≠0; drop cells where M[i]=0
- Returns apl-vector of apl-vector parts
- pipeline 140/140
This commit is contained in:
2026-05-08 22:55:01 +00:00
parent a074ea9e98
commit 015ecb8bc8
4 changed files with 54 additions and 1 deletions

View File

@@ -913,6 +913,20 @@
((result (reduce (fn (acc-and-n i) (let ((acc (first acc-and-n)) (rem (nth acc-and-n 1))) (let ((b (nth b-ravel (- (- b-len 1) i)))) (if (= b 0) (list (cons rem acc) 0) (list (cons (modulo rem b) acc) (floor (/ rem b))))))) (list (list) n) (range 0 b-len))))
(apl-vector (first result)))))))
(define
apl-partition
(fn
(mask val)
(let
((m-ravel (if (scalar? mask) (list (disclose mask)) (get mask :ravel)))
(v-ravel
(if (scalar? val) (list (disclose val)) (get val :ravel))))
(let
((n (len m-ravel)))
(let
((built (reduce (fn (acc-and-prev i) (let ((acc (first acc-and-prev)) (prev (nth acc-and-prev 1))) (let ((mi (nth m-ravel i)) (vi (nth v-ravel i))) (cond ((= mi 0) (list acc 0)) ((> mi prev) (list (append acc (list (list vi))) mi)) (else (let ((idx (- (len acc) 1))) (list (append (slice acc 0 idx) (list (append (nth acc idx) (list vi)))) mi))))))) (list (list) 0) (range 0 n))))
(apl-vector (map (fn (part) (apl-vector part)) (first built))))))))
(define
apl-primes
(fn