// Abstract ------------------------------------------------------------------------------------------------------------------------------

This sample solves the classic coloring adjacent planar regions problem and it is based on John R. Fisher's Prolog tutorial.

// Examples ------------------------------------------------------------------------------------------------------------------------------

?- #solve(:chicken,:cows)
-> ( 23 , 7 ) := 1.00 (0.030) 1
?- #adjacent(2,3)
-> ( ) := 1.00 (0.001) 1
?- #adjacent(5,3)
-> ( ) := 0.00 (0.001) 1
?- #adjacent(3,:R)
-> ( 1 ) := 1.00 (0.001) 1
-> ( 2 ) := 1.00 (0.001) 2
-> ( 4 ) := 1.00 (0.001) 3
?- #conflict(a)
-> ( ) := 0.00 (0.007) 1
?- #conflict(b)
-> ( ) := 0.00 (0.006) 1
-> ( ) := 1.00 (0.009) 2
-> ( ) := 0.00 (0.006) 1
?- #conflict(:which)
-> ( b ) := 1.00 (0.013) 1
?- #adjacent(3,:R)
-> ( 1 ) := 1.00 (0.001) 1
-> ( 2 ) := 1.00 (0.001) 2
-> ( 4 ) := 1.00 (0.001) 3
?- #conflict(:R1,:R2,b)
-> ( 2 , 4 ) := 1.00 (0.010) 1
-> ( 4 , 2 ) := 1.00 (0.010) 2
?- #conflict(:R1,:R2,b), #color(:R1,:C,b)
-> ( 2 , 4 , blue ) := 1.00 (0.010) 1
-> ( 4 , 2 , blue ) := 1.00 (0.010) 2
 
// Code ----------------------------------------------------------------------------------------------------------------------------------

adjacent {

    (1,2);
    (2,1);
    (1,3);
    (3,1);
    (1,4);
    (4,1);
    (1,5);
    (5,1);
    (2,3);
    (3,2);
    (2,4);
    (4,2);
    (3,4);
    (4,3);
    (4,5);
    (5,4);
    (_,_) := 0;

 }

color {

    (1,red,a);
    (1,red,b);
    (2,blue,a);
    (2,blue,b);
    (3,green,a);
    (3,green,b);
    (4,yellow,a);
    (4,blue,b);
    (5,blue,a);
    (5,green,b);
    (_,_,_) := 0;

}

conflict {

    (:Coloring)         :- @adjacent(:X,:Y), @color(:X,:Color,:Coloring), @color(:Y,:Color,:Coloring);
    (:R1,:R2,:Coloring) :- @adjacent(:R1,:R2), @color(:R1,:Color,:Coloring), @color(:R2,:Color,:Coloring);

}

// ---------------------------------------------------------------------------------------------------------------------------------------

[Home] [Email] [Twitter] [LinkedIn]