packages feed

egison-3.2.0: lib/graph/graph.egi

;;;
;;; graph.egi
;;;

(define $graph
  (lambda [$a]
    (multiset (nodeInfo a))))

(define $nodeInfo
  (lambda [$a]
    (algebraic-data-matcher
      {<node a (multiset a) (multiset a)>})))

(define $hamilton-cycle
  (pattern-function [$a]
    <cons <node (& a_1 $h_1) <cons (& a_2 $h_2) _> _>
     (loop $i [3 $n]
       <cons <node ,h_(- i 1) <cons (& a_i $h_i) _> _>
             ...>
       <cons <node ,h_n <cons ,h_1 _> _>
             <nil>>)>))

(define $hamilton-path
  (pattern-function [$a]
    <cons <node (& a_1 $h_1) <cons (& a_2 $h_2) _> _>
     (loop $i [3 $n]
       <cons <node ,h_(- i 1) <cons (& a_i $h_i) _> _>
        ...>
       <cons <node ,h_n _ _>
        <nil>>)>))