%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%% {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)}