;;; ;;; graph.egi ;;; (define $Node Integer) (define $NodeInfo (type {[,$val [] {[$tgt (match [val tgt] [NodeInfo NodeInfo] {[[ ] {[]}] [[_ _] {}]})]}] [ [Node (Multiset Node) (Multiset Node)] {[ {[n in out]}]}] [_ [Something] {[$tgt {tgt}]}] })) (define $all-paths (lambda [$g $s $e] (let {[$n (size g)]} (match-all g Graph [(| _> $rest> _> (loop $l $i (between 3 (- n 1)) (| _> $rest> _> l>) $rest>>)>) [{s @(loop $l $i (between 2 (- n (size rest))) {a_i @l} {e})}]])))) (define $Graph (Multiset NodeInfo)) (define $hamilton-cycle (lambda [$g] (let {[$n (size g)]} (match-all g Graph [ _> (loop $l $i (between 3 n) _> l> _> _>)> (loop $l $i (between 1 n) {a_i @l} {})])))) (define $hamilton-path (lambda [$g] (let {[$n (size g)]} (match-all g Graph [ _> (loop $l $i (between 3 n) _> l> >)> (loop $l $i (between 1 n) {a_i @l} {})]))))