home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / PROGRAMS / GEOBASE.PRO < prev    next >
Encoding:
Text File  |  1990-03-26  |  6.1 KB  |  161 lines

  1. %
  2. %         G E O B A S E
  3. %         =============
  4. %
  5. %  Copyright (c) 1986, 90 by Prolog Development Center
  6. %
  7. %  The GEOGRAPHY database with a natural language interface
  8. %
  9.  
  10. code=3000
  11.  
  12. DOMAINS
  13.   ENT    = STRING    /* Names of entities            */
  14.   ASSOC    = STRING    /* Names of associations        */
  15.   RELOP    = STRING    /* gt, lt, eq for comparisons        */
  16.   UNIT    = STRING    /* kilometers, citizens etc.        */
  17.  
  18. INCLUDE "tdoms.pro"
  19.  
  20. /**********************************************************
  21.  The Language Tables - These are the database predicates
  22.  which define the language we will use to query Geobase.
  23. ***********************************************************/
  24.  
  25. DATABASE - language
  26.   schema(ENT,ASSOC,ENT)        /* Entity network: entity-assoc-entity */
  27.   entitysize(ENT,STRING)    /* This attribute tells which words can be
  28.                    user to query the size of the entity     */
  29.   relop(STRINGLIST,STRING)        /* Example: relop([greater,than],gt] */
  30.   assoc(ASSOC,STRINGLIST)        /* Alternative assoc names */
  31.   synonym(STRING,ENT)        /* Synonyms for entities */
  32.   ignore(STRING)        /* Words to be ignored */
  33.   minn(STRING)            /* Words stating minimum */
  34.   maxx(STRING)            /* Words stating maximum */
  35.   size(STRING,STRING)        /* big, long, high .... */
  36.   unit(STRING,STRING)        /* Units for population, area ... */
  37.  
  38.  
  39. /**************************************************************
  40.   The real database - These are the database predicates which
  41.   actually  maintain the information we will access.
  42. ****************************************************************/
  43.  
  44. DATABASE - data
  45. /*state(NAME,ABBREVIATION,CAPITAL,AREA,ADMIT,POPULATION,CITY,CITY,CITY,CITY */
  46.   state(STRING,STRING,STRING,REAL,REAL,INTEGER,STRING,STRING,STRING,STRING)
  47.  
  48. /*city(STATE,ABBREVIATION,NAME,POPULATION) */
  49.   city(STRING,STRING,STRING,REAL)
  50.  
  51. /*river(NAME,LENGTH,STATESTRINGLIST */
  52.   river(STRING,INTEGER,STRINGLIST)
  53.  
  54. /*border(STATE,ABBREVIATION,STATELIST) */
  55.   border(STRING,STRING,STRINGLIST)
  56.  
  57. /*highlow(STATE,ABBREVIATION,POINT,HEIGHT,POINT,HEIGHT) */
  58.   highlow(STRING,STRING,STRING,INTEGER,STRING,INTEGER)
  59.  
  60. /*mountain(STATE,ABBREVIATION,NAME,HEIGHT) */
  61.   mountain(STRING,STRING,STRING,REAL)
  62.  
  63. /*lake(NAME,AREA,STATELIST) */
  64.   lake(STRING,REAL,STRINGLIST)
  65.  
  66. /*road(NUMBER,STATELIST) */
  67.   road(STRING,STRINGLIST)
  68.  
  69. INCLUDE "tpreds.pro"
  70. INCLUDE "menu2.pro"
  71.  
  72.  
  73. /**************************************************************
  74.     Access to the database
  75. ****************************************************************/
  76.  
  77. PREDICATES        /* membership of a list */
  78.   member(STRING,STRINGLIST)
  79.  
  80. CLAUSES
  81.   member(X,[X|_]).
  82.   member(X,[_|L]):-member(X,L).
  83.  
  84. PREDICATES
  85.   db(ENT,ASSOC,ENT,STRING,STRING)
  86.   ent(ENT,STRING)
  87.  
  88. INCLUDE "geobase.inc" /* Include parser + scanner + eval*/
  89.  
  90. CLAUSES
  91. /*
  92.   ent returns values for a given entity name. Ex. if called by
  93.   ent(city,X)  X  is instantiated to cities.
  94. */
  95.   ent(continent,usa).
  96.   ent(city,NAME):-    city(_,_,NAME,_).
  97.   ent(state,NAME):-    state(NAME,_,_,_,_,_,_,_,_,_).
  98.   ent(capital,NAME):-    state(_,_,NAME,_,_,_,_,_,_,_).
  99.   ent(river,NAME):-    river(NAME,_,_).
  100.   ent(point,POINT):-    highlow(_,_,_,_,POINT,_).
  101.   ent(point,POINT):-    highlow(_,_,POINT,_,_,_).
  102.   ent(mountain,M):-    mountain(_,_,M,_).
  103.   ent(lake,LAKE):-    lake(LAKE,_,_).
  104.   ent(road,NUMBER):-    road(NUMBER,_).
  105.   ent(population,POPUL):-city(_,_,_,POPUL1),str_real(POPUL,POPUL1).
  106.   ent(population,S):-state(_,_,_,POPUL,_,_,_,_,_,_),str_real(S,POPUL).
  107.  
  108. /*
  109.   The db predicate is used to establish relationships between
  110.   entities. The first three parameters should always be instantiated
  111.   to entity_name - assoc_name - entity_name. The last two parameters
  112.   return the values corresponding to the two entity names.
  113. */
  114.  
  115.   /* Relationships about cities */
  116.   db(city,in,state,CITY,STATE):-    city(STATE,_,CITY,_).
  117.   db(state,with,city,STATE,CITY):-    city(STATE,_,CITY,_).
  118.   db(population,of,city,POPUL,CITY):-    city(_,_,CITY,POPUL1),str_real(POPUL,POPUL1).
  119.   db(population,of,capital,POPUL,CITY):-city(_,_,CITY,POPUL1),str_real(POPUL,POPUL1).
  120.  
  121.   /* Relationships about states */
  122.   db(abbreviation,of,state,ABBREVIATION,STATE):-    state(STATE,ABBREVIATION,_,_,_,_,_,_,_,_).
  123.   db(state,with,abbreviation,STATE,ABBREVIATION):-state(STATE,ABBREVIATION,_,_,_,_,_,_,_,_).
  124.   db(area,of,state,AREA,STATE):-    state(STATE,_,_,_,AREA1,_,_,_,_,_),str_real(AREA,AREA1).
  125.   db(capital,of,state,CAPITAL,STATE):-    state(STATE,_,CAPITAL,_,_,_,_,_,_,_).
  126.   db(state,with,capital,STATE,CAPITAL):-state(STATE,_,CAPITAL,_,_,_,_,_,_,_).
  127.   db(population,of,state,POPULATION,STATE):-state(STATE,_,_,POPUL,_,_,_,_,_,_),str_real(POPULATION,POPUL).
  128.   db(state,border,state,STATE1,STATE2):-border(STATE2,_,LIST),member(STATE1,LIST).
  129.  
  130.   /* Relationships about rivers */
  131.   db(length,of,river,LENGTH,RIVER):-    river(RIVER,LENGTH1,_),str_real(LENGTH,LENGTH1).
  132.   db(state,with,river,STATE,RIVER):-    river(RIVER,_,LIST),member(STATE,LIST).
  133.   db(river,in,state,RIVER,STATE):-    river(RIVER,_,LIST),member(STATE,LIST).
  134.  
  135.   /* Relationships about points */
  136.   db(point,in,state,POINT,STATE):-    highlow(STATE,_,POINT,_,_,_).
  137.   db(point,in,state,POINT,STATE):-    highlow(STATE,_,_,_,POINT,_).
  138.   db(state,with,point,STATE,POINT):-    highlow(STATE,_,POINT,_,_,_).
  139.   db(state,with,point,STATE,POINT):-    highlow(STATE,_,_,_,POINT,_).
  140.   db(height,of,point,HEIGHT,POINT):-    highlow(_,_,_,_,POINT,H),str_int(HEIGHT,H),!.
  141.   db(height,of,point,HEIGHT,POINT):-    highlow(_,_,POINT,H,_,_),str_int(HEIGHT,H),!.
  142.  
  143.   /* Relationships about mountains */
  144.   db(mountain,in,state,MOUNT,STATE):-    mountain(STATE,_,MOUNT,_).
  145.   db(state,with,mountain,STATE,MOUNT):-    mountain(STATE,_,MOUNT,_).
  146.   db(height,of,mountain,HEIGHT,MOUNT):-    mountain(_,_,MOUNT,H1),str_int(HEIGHT,H1).
  147.  
  148.   /* Relationships about lakes */
  149.   db(lake,in,state,LAKE,STATE):-    lake(LAKE,_,LIST),member(STATE,LIST).
  150.   db(state,with,lake,STATE,LAKE):-    lake(LAKE,_,LIST),member(STATE,LIST).
  151.   db(area,of,lake,AREA,LAKE):-        lake(LAKE,A1,_),str_real(AREA,A1).
  152.  
  153.   /* Relationships about roads */
  154.   db(road,in,state,ROAD,STATE):-    road(ROAD,LIST),member(STATE,LIST).
  155.   db(state,with,road,STATE,ROAD):-    road(ROAD,LIST),member(STATE,LIST).
  156.  
  157.   db(E,in,continent,VAL,usa):-        ent(E,VAL).
  158.   db(name,of,_,X,X):-            bound(X).
  159.  
  160.  
  161.