packages feed

egison-3.2.2: lib/tree/tree.egi

(define $b-tree
  (lambda [$a $b]
    (algebraic-data-matcher
      {<leaf b> <node (b-tree a b) (b-tree a b)>})))

(define $tree
  (lambda [$a $b]
    (matcher
      {[,$val []
        {[$tgt (match [val tgt] [(tree a b) (tree a b)]
                 {[[<lnode $x $ts> <lnode ,x ,ts>] {[]}]
                  [[_ _] {}]})]}]
       [<leaf $> b
        {[<Leaf $x> {x}]
         [_ {}]}]
       [<lnode $ $> [a (list (tree a b))] ; Node whose children are seen as a list.
        {[<Node $x $ts> {[x ts]}]
         [_ {}]}]
       [<mnode $ $> [a (multiset (tree a b))] ; Node whose children are seen as a multiset.
        {[<Node $x $ts> {[x ts]}]
         [_ {}]}]
       [<descendant $> [(tree a b)]
        {[$t {t @(match-all t (tree a b)
                   [<mnode _ <cons <descendant $x> _>> x])}]}]
       [$ [something]
        {[$tgt {tgt}]}]
       })))