1/* @(#)world0.pl	24.1 2/23/88 */
    2
    3/*
    4	Copyright 1986, Fernando C.N. Pereira and David H.D. Warren,
    5
    6			   All Rights Reserved
    7*/
    8
    9% Data for the World Database.
   10% ---------------------------
   11
   12
   13
   14:-op(600,xfy,--).   15
   16
   17% Interface.
   18% ---------
   19
   20database(X):- catch(database_u(X),E,(dbug(error(E,database_u(X))),trace,call(X))).
   21
   22database_u(aggregate(X,Y,Z)) :- aggregate(X,Y,Z).
   23database_u(one_of(X,Y)) :- one_of(X,Y).
   24database_u(ratio(X,Y,Z)) :- ratio(X,Y,Z).
   25database_u(cardinality(X,Y)) :- cardinality(X,Y).
   26database_u(african(X)) :- african(X).
   27database_u(american(X)) :- american(X).
   28database_u(area(X)) :- area(X).
   29database_u(area(X,Y)) :- area(X,Y).
   30database_u(asian(X)) :- asian(X).
   31database_u(borders(X,Y)) :- borders(X,Y).
   32database_u(capital(X)) :- capital(X).
   33database_u(capital(X,Y)) :- capital(X,Y).
   34database_u(circle_of_latitude(X)) :- circle_of_latitude(X).
   35database_u(city(X)) :- city(X).
   36database_u(continent(X)) :- continent(X).
   37database_u(country(X)) :- country(X).
   38database_u(drains(X,Y)) :- drains(X,Y).
   39database_u(eastof(X,Y)) :- eastof(X,Y).
   40database_u(european(X)) :- european(X).
   41database_u(exceeds(X,Y)) :- exceeds(X,Y).
   42database_u(flows(X,Y)) :- flows(X,Y).
   43database_u(flows(X,Y,Z)) :- flows(X,Y,Z).
   44database_u(in(X,Y)) :- in(X,Y).
   45database_u(latitude(X)) :- latitude(X).
   46database_u(latitude(X,Y)) :- latitude(X,Y).
   47database_u(longitude(X)) :- longitude(X).
   48database_u(longitude(X,Y)) :- longitude(X,Y).
   49database_u(northof(X,Y)) :- northof(X,Y).
   50database_u(ocean(X)) :- ocean(X).
   51database_u(place(X)) :- place(X).
   52%database_u(person(X)) :- person(X).
   53database_u(population(X)) :- population(X).
   54database_u(population(X,Y)) :- population(X,Y).
   55database_u(region(X)) :- region(X).
   56database_u(rises(X,Y)) :- rises(X,Y).
   57database_u(river(X)) :- river(X).
   58database_u(sea(X)) :- sea(X).
   59database_u(seamass(X)) :- seamass(X).
   60database_u(southof(X,Y)) :- southof(X,Y).
   61database_u(westof(X,Y)) :- westof(X,Y).
   62
   63:-op(500,xfy,--).   64
   65% exceeds(X--U,Y--U) :- !, X > Y.
   66exceeds(X--_,Y--_):- (var(X);var(Y)),!,fail.
   67exceeds(X--U1,Y--U2) :- U1=U2, !, X > Y.
   68exceeds(X1--U1,X2--U2) :- ratio(U1,U2,M1,M2), X1*M1 > X2*M2.
   69
   70ratio(thousand,million,1,1000).
   71ratio(million,thousand,1000,1).
   72ratio(ksqmiles,sqmiles,1000,1).
   73ratio(sqmiles,ksqmiles,1,1000).
   74
   75area(_X--ksqmiles).
   76capital(C) :- capital(_X,C).
   77city(C) :- city(C,_,_).
   78country(C) :- country(C,_, _,_,_, _,_,_, _,_).
   79latitude(_X--degrees).
   80longitude(_X--degrees).
   81place(X) :- continent(X); region(X); seamass(X); country(X).
   82population(_X--million).
   83population(_X--thousand).
   84region(R) :- in_continent(R,_).
   85
   86african(X) :- in(X,africa).
   87american(X) :- in(X,america).
   88asian(X) :- in(X,asia).
   89european(X) :- in(X,europe).
   90
   91in(X,Y) :- var(X), nonvar(Y), !, contains(Y,X).
   92in(X,Y) :- in0(X,W), ( W=Y ; in(W,Y) ).
   93
   94in0(X,Y) :- in_continent(X,Y).
   95in0(X,Y) :- city(X,Y,_).
   96in0(X,Y) :- country(X,Y,_,_,_, _,_,_, _,_).
   97in0(X,Y) :- flows(X,Y).
   98
   99eastof(X1,X2) :- longitude(X1,L1), longitude(X2,L2), exceeds(L2,L1).
  100northof(X1,X2) :- latitude(X1,L1), latitude(X2,L2), exceeds(L1,L2).
  101southof(X1,X2) :- latitude(X1,L1), latitude(X2,L2), exceeds(L2,L1).
  102westof(X1,X2) :- longitude(X1,L1), longitude(X2,L2), exceeds(L1,L2).
  103
  104circle_of_latitude(equator).
  105circle_of_latitude(tropic_of_cancer).
  106circle_of_latitude(tropic_of_capricorn).
  107circle_of_latitude(arctic_circle).
  108circle_of_latitude(antarctic_circle).
  109
  110latitude(equator,0--degrees).
  111latitude(tropic_of_cancer,23--degrees).
  112latitude(tropic_of_capricorn,-23--degrees).
  113latitude(arctic_circle,67--degrees).
  114latitude(antarctic_circle,-67--degrees).
  115
  116latitude(C,L--degrees) :- country(C,_,L,_,_,_,_,_,_,_).
  117longitude(C,L--degrees) :- country(C,_,_,L,_,_,_,_,_,_).
  118area(C,A--ksqmiles) :- country(C,_,_,_,A,_,_,_,_,_).
  119population(C,P--thousand) :- city(C,_,P).
  120population(C,P--million) :- country(C,_,_,_,_,_,P,_,_,_).
  121capital(C,Cap) :- country(C,_,_,_,_,_,_,_,Cap,_).
  122
  123continent(africa).
  124continent(america).
  125continent(antarctica).
  126continent(asia).
  127continent(australasia).
  128continent(europe).
  129
  130in_continent(scandinavia, europe).
  131in_continent(western_europe, europe).
  132in_continent(eastern_europe, europe).
  133in_continent(southern_europe, europe).
  134in_continent(north_america, america).
  135in_continent(central_america, america).
  136in_continent(caribbean, america).
  137in_continent(south_america, america).
  138in_continent(north_africa, africa).
  139in_continent(west_africa, africa).
  140in_continent(central_africa, africa).
  141in_continent(east_africa, africa).
  142in_continent(southern_africa, africa).
  143in_continent(middle_east,  asia).
  144in_continent(indian_subcontinent, asia).
  145in_continent(southeast_east, asia).
  146in_continent(far_east, asia).
  147in_continent(northern_asia, asia).
  148
  149seamass(X) :- ocean(X).
  150seamass(X) :- sea(X).
  151
  152ocean(arctic_ocean).
  153ocean(atlantic).
  154ocean(indian_ocean).
  155ocean(pacific).
  156ocean(southern_ocean).
  157
  158sea(baltic).
  159sea(black_sea).
  160sea(caspian).
  161sea(mediterranean).
  162sea(persian_gulf).
  163sea(red_sea).
  164
  165river(R) :- river(R,_L).
  166
  167rises(R,C) :- river(R,L), last(L,C).
  168
  169drains(R,S) :- river(R,L), first(L,S).
  170
  171flows(R,C) :- flows(R,C,_).
  172
  173flows(R,C1,C2) :- river(R,L), links(L,C2,C1).
  174
  175first([X|_],X).
  176
  177% last([X],X).					% (SWI-system predicate)
  178% last([_|L],X) :- last(L,X).
  179
  180links([X1,X2|_],X1,X2).
  181links([_|L],X1,X2) :- links(L,X1,X2)