%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%  {log} sample programs  %%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%                  Apr. 1997 - by Gianfranco Rossi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

median(S,M) :-
          M in S &
		  size({Z : Z in S & Z < M},N1) &
		  size({Z : Z in S & Z > M},N2) &
		  N1 = N2.
		  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

in_difference(X,Set1,Set2) :- 
           X in Set1 & X nin Set2.
		   
% Sample goals:
% <- in_difference(X,{1,2},{1,3})
% <- in_difference(X,S1,{1,3})

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

at_least_two({X,Y/S}) :-
          X neq Y & X nin S & Y nin S.
		  
% Sample goals:
% <- at_least_two({a,b})
% <- at_least_two({X,Y})
% <- at_least_two({a})

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

disj(S1,S2) :-
    forall(X in S1, forall(Y in S2,X neq Y)).         

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

coloring(Regions,Map,Colors) :-
     Regions = Colors &
	 forall(R in Regions, {R} nin Map).

% Sample goals:	  
% <- coloring({R1,R2,R3},{{R1,R2},{R2,R3}},{c1,c2}).
% <- coloring({R1,R2,R3},{{R1,R2},{R2,R3}},{X,c2}).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

primes(N,S) :- 
     S = {X : between(X,1,N) & is_prime(X)}.
is_prime(X) :-
     S = {Y : between(Y,1,X)} &
	 forall( Z in S, non_div(Z,X) ).
non_div(A,B) :- Rmdr is (B mod A) & Rmdr neq 0.


between(X,I,S) :-
      generate(X,I,S) & X > I & X < S.
generate(X,I,S) :- I < S & X is I + 1.
generate(X,I,S) :- I < S & J is I + 1 & generate(X,J,S).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

solve_puzzle(S,E,N,D,M,O,R,Y) :-
       {S,E,N,D,M,O,R,Y,_,_} = {0,1,2,3,4,5,6,7,8,9} &
       MONEY is M * 10000 + O * 1000 + N * 100 + E * 10 + Y &
       SEND is S * 1000 + E * 100 + N * 10 + D &
       MORE is M * 1000 + O * 100 + R * 10 + E &
       SEND + MORE =:= MONEY.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	   
	   
likes(john,beer).
likes(ann,beer).
likes(peter,coke).
likes(mary,wine).
likes(peter,wine).

male(john).
male(peter).
female(ann).
female(mary).

% Sample goals:
% <- S = {Person : likes(Person,wine)}
% <- S = {Drink : likes(peter,Drink)}
% <- S = {Person : likes(Person,Drink)}
