;; ;; Array.egi ;; (define $Array (lambda [$a] (type {[ [] {[$arr (if (and (array-range? key arr) ((= a) (array-ref key arr) val)) {[]} {})]}] [ [a] {[$arr (if (array-range? key arr) {[(array-ref key arr)]} {})]}] [_ [Something] {[$tgt {[tgt]}]}] }))) (define $range-to-keys (lambda $ms (letrec {[$range-to-keys2 (lambda [$ms] (match ms (List Integer) {[ {{}}] [ (let {[$iss (range-to-keys2 ns)]} (concat (map (lambda [$i] (map (lambda [$is] {i @is}) iss)) (between 1 n))))]}))]} (map collection-to-tuple (range-to-keys2 (tuple-to-collection ms)))))) (define $keys-for-display (lambda [$mx $my] (let {[$xs (between 1 mx)] [$ys (reverse (between 1 my))]} (map (lambda [$y] (map (lambda [$x] [x y]) xs)) ys)))) (define $find-from-value (lambda [$a] (lambda [$val $arr] (let {[$keys (array-keys arr)]} (letrec {[$helper (lambda [$keys] (if ((= a) (array-ref (car keys) arr) val) (car key) (helper (cdr keys))))]} (helper keys)))))) (define $find-all-from-value (lambda [$a] (lambda [$val $arr] (let {[$keys (array-keys arr)]} (letrec {[$helper (lambda [$keys $ret] (match keys (List Something) {[ ret] [ (if ((= a) (array-ref key arr) val) (helper rest {@ret val}) (helper rest ret))]}))]} (helper keys {})))))) (define $find-from-value-with-pattern (lambda [$a] (lambda [$pat $arr] (let {[$keys (array-keys arr)]} (letrec {[$helper (lambda [$keys] (match (array-ref (car keys) arr) a {[pat (car keys)] [_ (helper (cdr keys))]}))]} (helper keys)))))) (define $find-all-from-value-with-pattern (lambda [$a] (lambda [$pat $arr] (let {[$keys (array-keys arr)]} (letrec {[$helper (lambda [$keys $ret] (match keys (List Something) {[ ret] [ (match (array-ref key arr) a {[pat (helper rest {@ret val})] [_ (helper rest ret)]})]}))]} (helper keys {}))))))