;;;;; ;;;;; ;;;;; Assoc-Collection ;;;;; ;;;;; (define $to-assoc (lambda [$xs] (match xs (list something) {[ {}] [ (& ! $rs))> {[x n] @(to-assoc rs)}]}))) (define $from-assoc (lambda [$xs] (match xs (list [something integer]) {[ {}] [ {@(take n (repeat1 x)) @(from-assoc rs)}]}))) ;;; ;;; Assoc List ;;; (define $assoc-list (lambda [$a] (matcher {[ [] {[{} {[]}] [_ {}]}] [ [a (assoc-list a)] {[$tgt (match tgt (list [something integer]) {[ {[x rs]}] [ {[x {[x (- n 1)] @rs}]}] [_ {}]})]}] [ [a (assoc-list a)] {[$tgt (match tgt (list [something integer]) {[ {[x rs]}] [ {[x {[x (- n k)] @rs}]}] [_ {}]})]}] [ [a integer (assoc-list a)] {[$tgt (match tgt (list [something integer]) {[ {[x k rs]}] [_ {}]})]}] [,$val [] {[$tgt (if (eq? val tgt) {[]} {})]}] [$ [something] {[$tgt {tgt}]}] }))) ;;; ;;; Assoc Multiset ;;; (define $assoc-multiset (lambda [$a] (matcher {[ [] {[{} {[]}] [_ {}]}] [ [(assoc-multiset a)] {[$tgt (match-all tgt (list [a integer]) [> (if (eq? n 1) {@hs @ts} {@hs [x (- n 1)] @ts})])]}] [ [a (assoc-multiset a)] {[$tgt (match-all tgt (list [a integer]) [> (if (eq? n 1) [x {@hs @ts}] [x {@hs [x (- n 1)] @ts}])])]}] [ [(assoc-multiset a)] {[$tgt (match-all tgt (list [a integer]) [> (if (eq? (- k n) 0) {@hs @ts} {@hs [x (- k n)] @ts})])]}] [ [a (assoc-multiset a)] {[$tgt (match-all tgt (list [a integer]) [> (if (eq? (- k n) 0) [x {@hs @ts}] [x {@hs [x (- k n)] @ts}])])]}] [ [integer (assoc-multiset a)] {[$tgt (match-all tgt (list [a integer]) [> [n {@hs @ts}]])]}] [ [a integer (assoc-multiset a)] {[$tgt (match-all tgt (list [a integer]) [> [x n {@hs @ts}]])]}] [$ [something] {[$tgt {tgt}]}] }))) (define $AC.intersect (lambda [$xs $ys] (match-all [xs ys] [(assoc-multiset something) (assoc-multiset something)] [[ ] [x (min m n)]]))) (define $AC.intersect/m (lambda [$a $xs $ys] (match-all [xs ys] [(assoc-multiset a) (assoc-multiset a)] [[ ] [x (min m n)]])))