/* * file: map.pl * author: Robert Keller * purpose: coloring a map using Prolog */ map([Algeria, Chad, Egypt, Libya, Mali, Mauritania, Morocco, Niger, Sudan, Tunisia, Western_Sahara], Colors) :- touches(Algeria, Libya, Colors), touches(Algeria, Mali, Colors), touches(Algeria, Mauritania, Colors), touches(Algeria, Morocco, Colors), touches(Algeria, Niger, Colors), touches(Algeria, Tunisia, Colors), touches(Algeria, Western_Sahara, Colors), touches(Chad, Libya, Colors), touches(Chad, Niger, Colors), touches(Chad, Sudan, Colors), touches(Egypt, Libya, Colors), touches(Egypt, Sudan, Colors), touches(Libya, Algeria, Colors), touches(Libya, Chad, Colors), touches(Libya, Egypt, Colors), touches(Libya, Niger, Colors), touches(Libya, Sudan, Colors), touches(Libya, Tunisia, Colors), touches(Mauritania, Algeria, Colors), touches(Mauritania, Mali, Colors), touches(Mauritania, Western_Sahara, Colors), touches(Morocco, Algeria, Colors), touches(Morocco, Western_Sahara, Colors), touches(Niger, Algeria, Colors), touches(Niger, Chad, Colors), touches(Niger, Libya, Colors), touches(Niger, Mali, Colors), touches(Sudan, Chad, Colors), touches(Sudan, Egypt, Colors), touches(Sudan, Libya, Colors), touches(Algeria, Libya, Colors), touches(Tunisia, Libya, Colors). touches(X, Y, Colors) :- %% two adjacent regions are colored differently member(X, Colors), member(Y, Colors), X \== Y. member(X, [X | _]). member(X, [_ | Ys]) :- member(X, Ys). test1 :- map(Solution, [red, blue]), write(Solution). test2 :- map(Solution, [red, blue, green]), write(Solution).