packages feed

egison-2.2.3: lib/core/array.egi

;;
;; Array.egi
;;

(define $Array
  (lambda [$a]
    (type
      {[$var-match (lambda [$tgt] {tgt})]
       [$inductive-match
        (destructor
          {[<cons ,$key _ _> [a (Array a)]
            {[$arr (if (array-range? key arr)
                       {[(array-ref key arr) arr]}
                       {})]}]})]})))

(define $range-to-keys
  (lambda $ms
    (letrec {[$range-to-keys2
              (lambda [$ms]
                (match ms (List Integer)
                  {[<nil> {{}}]
                   [<cons $n $ns>
                    (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))))