home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / PROGRAMS.ARC / GEOBASE.PRO < prev    next >
Encoding:
Text File  |  1988-06-21  |  6.4 KB  |  170 lines

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