Files
mercury/tests/benchmarks/query.nl
Fergus Henderson aaafa54da5 Define main/2.
*.nl:
	Define main/2.
1995-03-06 05:22:25 +00:00

123 lines
2.4 KiB
Plaintext

% query
%
% David H. D. Warren
%
% query population and area database to find coun-
% tries of approximately equal population density
:- module query.
:- interface.
:- import_module list, int, io.
:- type quad ---> quad(string, int, string, int).
:- pred main1(quad).
:- mode main1(out) is nondet.
:- pred main3(quad, io__state, io__state).
:- mode main3(out, di, uo) is nondet.
:- pred main(io__state, io__state).
:- mode main(di, uo) is nondet.
:- implementation.
main --> main3(_).
main1(Out) :-
query(Out).
main3(Out) -->
{ main1(Out), Out = quad(C1, D1, C2, D2) },
io__write_string(C1),
io__write_string(" has density "),
io__write_int(D1),
io__write_string(" while "),
io__write_string(C2),
io__write_string(" has density "),
io__write_int(D2),
io__write_string("\n").
:- pred query(quad).
:- mode query(out) is nondet.
:- pred density(string, int).
:- mode density(out, out) is nondet.
:- pred pop(string, int).
:- mode pop(out, out) is nondet.
:- pred area(string, int).
:- mode area(in, out) is semidet.
query(quad(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),
P100 is P * 100,
D is P100 // A.
% populations in 100000s
pop("china", 8250).
pop("india", 5863).
pop("ussr", 2521).
pop("usa", 2119).
pop("indonesia", 1276).
pop("japan", 1097).
pop("brazil", 1042).
pop("bangladesh", 750).
pop("pakistan", 682).
pop("w_germany", 620).
pop("nigeria", 613).
pop("mexico", 581).
pop("uk", 559).
pop("italy", 554).
pop("france", 525).
pop("philippines", 415).
pop("thailand", 410).
pop("turkey", 383).
pop("egypt", 364).
pop("spain", 352).
pop("poland", 337).
pop("s_korea", 335).
pop("iran", 320).
pop("ethiopia", 272).
pop("argentina", 251).
% areas in 1000s of square miles
area("china", 3380).
area("india", 1139).
area("ussr", 8708).
area("usa", 3609).
area("indonesia", 570).
area("japan", 148).
area("brazil", 3288).
area("bangladesh", 55).
area("pakistan", 311).
area("w_germany", 96).
area("nigeria", 373).
area("mexico", 764).
area("uk", 86).
area("italy", 116).
area("france", 213).
area("philippines", 90).
area("thailand", 200).
area("turkey", 296).
area("egypt", 386).
area("spain", 190).
area("poland", 121).
area("s_korea", 37).
area("iran", 628).
area("ethiopia", 350).
area("argentina", 1080).