packages feed

egison-3.2.0: lib/tree/tree.egi

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

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