;;; ;;; 5-color ;;; (define $node [integer (maybe integer)]) (define $graph (set [node (multiset node)])) (define $colors (between 1 5)) (define $graph-data {[[1 Nothing] {[2 Nothing]}] [[2 Nothing] {[1 Nothing]}]}) (define $main (lambda [$graph-data] (match [colors graph-data] [(set integer) graph] {; 周りのノードでまだ5色全部使われていない場合. [[ ] _>] (main (assign-color id c graph-data))] ; 次数が5で周りで5色全部使われているノードしか残っていない場合. [[_ >>>>>] _>] undefined] ; すべてのノードに色付け完了. [_ graph-data] }))) (define $assign-color (lambda [$id $c $graph-data] (map (lambda [$n] [(rewrite-node id c (2#%1 n)) (map (lambda [$n] (rewrite-node id c n)) (2#%2 n))]) graph-data))) (define $rewrite-node (lambda [$id $c $n] (match n node {[[,id (nothing)] [id (Just c)]] [_ n]}))) (rewrite-node 1 5 [1 Nothing]) ; [1 {5}] (assign-color 1 5 graph-data) ; {[[1 {5}] {[2 {}]}] [[2 {}] {[1 {5}]}]} (main graph-data) ; {[[1 {1}] {[2 {2}]}] [[2 {2}] {[1 {1}]}]}