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>>)>))