fork download
  1. color(red).
  2. color(green).
  3. color(blue).
  4. color(yellow).
  5.  
  6. adjacent(鶴見, 神奈川).
  7. adjacent(神奈川, 西).
  8. adjacent(西,).
  9. adjacent(,).
  10. adjacent(, 港南).
  11. adjacent(港南, 磯子).
  12. adjacent(磯子, 金沢).
  13. adjacent(金沢,).
  14. adjacent(, 港南).
  15. adjacent(, 保土ケ谷).
  16. adjacent(保土ケ谷, 西).
  17. adjacent(保土ケ谷,).
  18. adjacent(, 瀬谷).
  19. adjacent(瀬谷,).
  20. adjacent(, 戸塚).
  21. adjacent(戸塚,).
  22. adjacent(都筑, 港北).
  23. adjacent(都筑, 青葉).
  24. adjacent(都筑,).
  25. adjacent(港北, 神奈川).
  26. adjacent(, 青葉).
  27. adjacent(港北, 鶴見).
  28. adjacent(保土ケ谷,).
  29.  
  30. different(1-1,2-2) :-
  31. (adjacent(1,2); adjacent(2,1)) ->1 \=2 ; true.
  32.  
  33. valid_coloring(Vars) :-
  34. % 隣接している区の間で色が異なる
  35. forall(
  36. (member(A, Vars), member(B, Vars), A \= B),
  37. different(A, B)
  38. ).
  39.  
  40. try_coloring(Result) :-
  41. Vars = [
  42. 鶴見-A, 神奈川-B, 西-C,-D,-E, 港南-F,
  43. 磯子-G, 金沢-H,-I, 保土ケ谷-J,-K, 瀬谷-L,
  44. -M, 戸塚-N, 都筑-O, 港北-P,-Q, 青葉-R
  45. ],
  46. Colors = [red, green, blue, yellow],
  47. member(A, Colors), member(B, Colors), member(C, Colors), member(D, Colors),
  48. member(E, Colors), member(F, Colors), member(G, Colors), member(H, Colors),
  49. member(I, Colors), member(J, Colors), member(K, Colors), member(L, Colors),
  50. member(M, Colors), member(N, Colors), member(O, Colors), member(P, Colors),
  51. member(Q, Colors), member(R, Colors),
  52. Result = [
  53. 鶴見-A, 神奈川-B, 西-C,-D,-E, 港南-F,
  54. 磯子-G, 金沢-H,-I, 保土ケ谷-J,-K, 瀬谷-L,
  55. -M, 戸塚-N, 都筑-O, 港北-P,-Q, 青葉-R
  56. ],
  57. valid_coloring(Result), !. % 見つかったら即終了
  58.  
  59. print_colors([]).
  60. print_colors([-| 残り]) :-
  61. write(), write(' -> '), write(), nl,
  62. print_colors(残り).
  63.  
  64. :- try_coloring(Result), write('4色で塗り分け可能'), nl, print_colors(Result).
  65.  
Success #stdin #stdout #stderr 5s 7168KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Warning: /home/SVm2Eq/prog:40:
	Singleton variables: [Vars]
ERROR: /home/SVm2Eq/prog:64:
	\=/2: Caught signal 24 (xcpu)
Warning: /home/SVm2Eq/prog:64:
	Goal (directive) failed: user:(try_coloring(_3348),write('4色で塗り分け可能'),nl,print_colors(_3348))
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit