Annotated using CiaoPP: :- mode(pop/2, [+,-]). :- mode(query/1, [+]). :- mode(density/2, [+,+]). :- mode(area/2, [+,-]). :- measure(pop/2, [size,int]). :- measure(query/1, [length]). :- measure(density/2, [size,size]). :- measure(area/2, [size,int]). %complexity: query(i). /*----------------------------------------------------------------------------- Program: simple query to a (Prolog) database Author: D.H.D.Warren Date: 1977 From Warren's thesis To test: do. (first solution) or main. (all solutions) -----------------------------------------------------------------------------*/ %:- entry(query(Q),[free(Q)]). query([C1,D1,C2,D2]) :- density(C1,D1), density(C2,D2), D1 > D2, T1 is 20*D1, T2 is 21*D2, T1 < T2. density(C,D) :- pop(C,P), area(C,A), D is (P*100)/A. pop(china, 8250). area(china, 3380). pop(india, 5863). area(india, 1139). pop(ussr, 2521). area(ussr, 8708). pop(usa, 2119). area(usa, 3609). pop(indonesia, 1276). area(indonesia, 570). pop(japan, 1097). area(japan, 148). pop(brazil, 1042). area(brazil, 3288). pop(bangladesh, 750). area(bangladesh,55). pop(pakistan, 682). area(pakistan, 311). pop(w_germany, 620). area(w_germany, 96). pop(nigeria, 613). area(nigeria, 373). pop(mexico, 581). area(mexico, 764). pop(uk, 559). area(uk, 86). pop(italy, 554). area(italy, 116). pop(france, 525). area(france, 213). pop(phillipines,415). area(phillipines,90). pop(thailand, 410). area(thailand, 200). pop(turkey, 383). area(turkey, 296). pop(egypt, 364). area(egypt, 386). pop(spain, 352). area(spain, 190). pop(poland, 337). area(poland, 121). pop(s_korea, 335). area(s_korea, 37). pop(iran, 320). area(iran, 628). pop(ethiopia, 272). area(ethiopia, 350). pop(argentina, 251). area(argentina, 1080). /* % --------------------------------------------------------------------- % to test: :- noparallelize. do :- write('Warren`s thesis query'), nl, nl, time(_), query(X), report(X,T). main :- write('Warren`s thesis query'), nl, nl, time(_), bagof(X,X^query(X),L), time(T), write('All solutions: '), write(L),nl, write('Solved in '), write(T), write(' msec.'), nl. time(T) :- statistics(runtime,[_,T|_]). report(X,T) :- time(T), write('The solution is: '), write(X),nl, write('Solved in '), write(T), write(' msec.'), nl. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This piece has been included for the simulation process % no_trace_main:- time(_), query(X), time(T), write('Executed in '), write(T), write(' mS.'), nl, write('Result '), write(X), nl. trace_main(Eventfile):- start_event_trace, query(X), stop_event_trace, save_trace(Eventfile), write('Result '), write(X),nl. save_trace(X) :- write('Saving trace in file '), write(X), write('... '), open(X,write,Y), save_event_trace(Y), close(X), write('done.'), nl. time(T) :- statistics(runtime,[_,T]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */ Caslog 1.0, April 1992. * Mutually exclusive classes of clauses for predicate pop/2 : [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25]] * Size functions for predicate pop/2 : [1,8250] * Relation functions for predicate pop/2 : [25] * Solution functions for predicate pop/2 : [1] * Time functions for predicate pop/2 : [1] * Mutually exclusive classes of clauses for predicate area/2 : [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25]] * Size functions for predicate area/2 : [1,8708] * Relation functions for predicate area/2 : [25] * Solution functions for predicate area/2 : [1] * Time functions for predicate area/2 : [1] * Mutually exclusive classes of clauses for predicate density/2 : [[1]] * Size functions for predicate density/2 : [$(1),$(2)] * Relation functions for predicate density/2 : [inf] * Solution functions for predicate density/2 : [1] * Time functions for predicate density/2 : [3] * Mutually exclusive classes of clauses for predicate query/1 : [[1]] * Size functions for predicate query/1 : [4] * Relation functions for predicate query/1 : [inf] * Solution functions for predicate query/1 : [1] * Time functions for predicate query/1 : [7] {Exexution Time: 12.001 msec} {End of Caslog execution.}