Ciao Preprocessor (integrated Alpha version)
 | This is an alpha distribution, meant only for testing. Please do let us 
 | know at ciaopp-bugclip.dia.fi.upm.es any problems you may have.

{In /tmp/tmpoW0ub5/map_color.pl
{loaded in 3360.21 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 4.001 msec.}
{written file /tmp/tmpoW0ub5/map_color_det_co.pl}
:- module(_1,[map/1],[assertions]).

color_map([],_1).
color_map([Region|Regions],Colors) :-
        color_region(Region,Colors),
        color_map(Regions,Colors).

color_region(region(_1,Color,Neighbors),Colors) :-
        select(Color,Colors,Colors1),
        subset(Neighbors,Colors1).

select(X,[X|Xs],Xs).
select(X,[Y|Xs],[Y|Zs]) :-
        select(X,Xs,Zs).

subset([],_1).
subset([X|Xs],Ys) :-
        member(X,Ys),
        subset(Xs,Ys).

member(X,[X|_1]).
member(X,[_1|Xs]) :-
        member(X,Xs).

:- entry map(A).

:- true pred map(A)
         : ( native_props:mshare([[A]]), term(A) )
        => ( native_props:mshare([[A]]), rt0(A) )
         + ( is_det, mut_exclusive ).

map([region(belize,Belize,[Guatemala]),region(guatemala,Guatemala,[Belize,El_Salvador,Honduras]),region(el_salvador,El_Salvador,[Guatemala,Honduras]),region(honduras,Honduras,[Guatemala,El_Salvador,Nicaragua]),region(nicaragua,Nicaragua,[Honduras,Costa_rica]),region(costa_rica,Costa_rica,[Nicaragua,Panama]),region(panama,Panama,[Costa_rica])]).

query :-
        map(X),
        color_map(X,[red,blue,green]).


:- regtype rt0/1.

rt0([region(belize,A,[B]),region(guatemala,C,[D,E,F]),region(el_salvador,G,[H,I]),region(honduras,J,[K,L,M]),region(nicaragua,N,[O,P]),region(costa_rica,Q,[R,S]),region(panama,T,[U])]) :-
        term(A),
        term(B),
        term(C),
        term(D),
        term(E),
        term(F),
        term(G),
        term(H),
        term(I),
        term(J),
        term(K),
        term(L),
        term(M),
        term(N),
        term(O),
        term(P),
        term(Q),
        term(R),
        term(S),
        term(T),
        term(U).