home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Borland Plateform / Turbo Prolog 2 / GEOBASE.PRO < prev    next >
Encoding:
Text File  |  1986-04-25  |  6.3 KB  |  155 lines

  1. /******************************************************************/
  2. /*                                  */
  3. /*            ***     G E O B A S E  ***              */
  4. /*                                  */
  5. /*    GEOGRAPHY-database with a natural language interface      */
  6. /*                                  */
  7. /******************************************************************/
  8. /*    CAUTION: GEOBASE REQUIRES A LARGE AMOUNT OF MEMORY TO     */
  9. /*               COMPILE AND RUN.   IF THE FOLLOWING ERROR        */
  10. /*               MESSAGE APPEARS IN THE MESSAGE WINDOW:           */
  11. /*                                                                */
  12. /*                  1003  HEAP OVERFLOW. NOT ENOUGH MEMORY OR     */
  13. /*                  ENDLESS LOOP,                                 */
  14. /*                                                                */
  15. /*               REMOVE ANY RAM RESEDENT PROGRAMS TO FREE         */
  16. /*               ADDITIONAL MEMORY.  THEN RECOMPILE AND RUN       */
  17. /*               GEOBASE AGAIN.                                   */
  18. /******************************************************************/
  19.  
  20. code=2500
  21.  
  22. DOMAINS
  23.   LIST = SYMBOL*            /* The domain LIST is a list of words */
  24.  
  25. DATABASE
  26.   /* The Language Database */
  27.   relat(SYMBOL,LIST)            /* Relation name and a list of attributes */
  28.   schema(SYMBOL,SYMBOL,SYMBOL)        /* Entity network: entity-assoc-entity */
  29.  
  30.   entitysize(SYMBOL,SYMBOL)        /* Which attribute gives the size of an entity */
  31.   relop(LIST,SYMBOL)            /* Example: relop([greater,than],gt] */
  32.   assoc(SYMBOL,LIST)            /* Alternative assoc names */
  33.   synonym(SYMBOL,SYMBOL)        /* Synonyms for entities */
  34.   ignore(SYMBOL)            /* Words to be ignored */
  35.   min(SYMBOL)                /* Words stating minimum */
  36.   max(SYMBOL)                /* Words stating maximum */
  37.   big(SYMBOL,SYMBOL)            /* big, long, high .... */
  38.   unit(SYMBOL,SYMBOL)            /* Unit for population, area ... */
  39.  
  40.   /* The Real database */
  41.   
  42.   /* state(NAME,ABBREVIATION,CAPITAL,AREA,ADMIT,POPULATION,CITY,CITY,CITY,CITY */
  43.   state(SYMBOL,SYMBOL,SYMBOL,REAL,REAL,INTEGER,SYMBOL,SYMBOL,SYMBOL,SYMBOL)
  44.   
  45.   /* city(STATE,ABBREVIATION,NAME,POPULATION) */
  46.   city(SYMBOL,SYMBOL,SYMBOL,REAL)
  47.   
  48.   /*river(NAME,LENGTH,STATELIST */
  49.   river(SYMBOL,INTEGER,LIST)
  50.   
  51.   /* border(STATE,ABBREVIATION,STATELIST) */
  52.   border(SYMBOL,SYMBOL,LIST)
  53.  
  54.   /* highlow(STATE,ABBREVIATION,POINT,HEIGHT,POINT,HEIGHT) */
  55.   highlow(SYMBOL,SYMBOL,SYMBOL,INTEGER,SYMBOL,INTEGER)
  56.  
  57.   /* mountain(STATE,ABBREVIATION,NAME,HEIGHT) */
  58.   mountain(SYMBOL,SYMBOL,SYMBOL,REAL)
  59.  
  60.   /* lake(NAME,AREA,STATELIST) */
  61.   lake(SYMBOL,REAL,LIST)
  62.  
  63.   /* road(NUMBER,STATELIST) */
  64.   road(SYMBOL,LIST)
  65.  
  66.  
  67. /****************************************************************/
  68. /*         Database Access                    */
  69. /****************************************************************/
  70.  
  71. PREDICATES
  72.   member(SYMBOL,LIST)        /* membership of a list */
  73.  
  74. CLAUSES
  75.   member(X,[X|_]).
  76.   member(X,[_|L]):-member(X,L).
  77.  
  78.  
  79. PREDICATES
  80.   /* Access to database */
  81.   db(SYMBOL,SYMBOL,SYMBOL,SYMBOL,SYMBOL)
  82.   ent(SYMBOL,SYMBOL)
  83.  
  84.  
  85. CLAUSES
  86.  
  87. /* ent returns values for a given entity name. Ex. if called by
  88.    ent(city,X)  X  is instantiated to cities.
  89. */
  90.  
  91.   ent(continent,usa).
  92.   ent(city,NAME):-    city(_,_,NAME,_).
  93.   ent(state,NAME):-    state(NAME,_,_,_,_,_,_,_,_,_).
  94.   ent(capital,NAME):-    state(_,_,NAME,_,_,_,_,_,_,_).
  95.   ent(river,NAME):-    river(NAME,_,_).
  96.   ent(point,POINT):-    highlow(_,_,_,_,POINT,_).
  97.   ent(point,POINT):-    highlow(_,_,POINT,_,_,_).
  98.   ent(mountain,M):-    mountain(_,_,M,_).
  99.   ent(lake,LAKE):-    lake(LAKE,_,_).
  100.   ent(road,NUMBER):-    road(NUMBER,_).
  101.  
  102.  
  103. /* The db predicate is used to establish relationships between
  104.    entities. The first three parameters should always be instantiated
  105.    to entityname-assocname-entityname, the last two parameters
  106.    return the values corresponding to the two entity names.
  107. */
  108.  
  109.   /* Relationships about cities */
  110.   db(city,in,state,CITY,STATE):-    city(STATE,_,CITY,_).
  111.   db(state,with,city,STATE,CITY):-    city(STATE,_,CITY,_).
  112.   db(population,of,city,POPUL,CITY):-    city(_,_,CITY,POPUL1),str_real(POPUL,POPUL1).
  113.   db(population,of,capital,POPUL,CITY):-city(_,_,CITY,POPUL1),str_real(POPUL,POPUL1).
  114.  
  115.   /* Relationships about states */
  116.   db(abbreviation,of,state,ABBREVIATION,STATE):-    state(STATE,ABBREVIATION,_,_,_,_,_,_,_,_).
  117.   db(state,with,abbreviation,STATE,ABBREVIATION):-state(STATE,ABBREVIATION,_,_,_,_,_,_,_,_).
  118.   db(area,of,state,AREA,STATE):-    state(STATE,_,_,_,AREA1,_,_,_,_,_),str_real(AREA,AREA1).
  119.   db(capital,of,state,CAPITAL,STATE):-    state(STATE,_,CAPITAL,_,_,_,_,_,_,_).
  120.   db(state,with,capital,STATE,CAPITAL):-state(STATE,_,CAPITAL,_,_,_,_,_,_,_).
  121.   db(population,of,state,POPULATION,STATE):-state(STATE,_,_,POPUL,_,_,_,_,_,_),str_real(POPULATION,POPUL).
  122.   db(state,border,state,STATE1,STATE2):-border(STATE2,_,LIST),member(STATE1,LIST).
  123.  
  124.   /* Relationships about rivers */
  125.   db(length,of,river,LENGTH,RIVER):-    river(RIVER,LENGTH1,_),str_real(LENGTH,LENGTH1).
  126.   db(state,with,river,STATE,RIVER):-    river(RIVER,_,LIST),member(STATE,LIST).
  127.   db(river,in,state,RIVER,STATE):-    river(RIVER,_,LIST),member(STATE,LIST).
  128.  
  129.   /* Relationships about points */
  130.   db(point,in,state,POINT,STATE):-    highlow(STATE,_,POINT,_,_,_).
  131.   db(point,in,state,POINT,STATE):-    highlow(STATE,_,_,_,POINT,_).
  132.   db(state,with,point,STATE,POINT):-    highlow(STATE,_,POINT,_,_,_).
  133.   db(state,with,point,STATE,POINT):-    highlow(STATE,_,_,_,POINT,_).
  134.   db(height,of,point,HEIGTH,POINT):-    highlow(_,_,_,_,POINT,H),str_int(HEIGTH,H),!.
  135.   db(height,of,point,HEIGTH,POINT):-    highlow(_,_,POINT,H,_,_),str_int(HEIGTH,H),!.
  136.  
  137.   /* Relationships about mountainss */
  138.   db(mountain,in,state,MOUNT,STATE):-    mountain(STATE,_,MOUNT,_).
  139.   db(state,with,mountain,STATE,MOUNT):-    mountain(STATE,_,MOUNT,_).
  140.   db(height,of,mountain,HEIGHT,MOUNT):-    mountain(_,_,MOUNT,H1),str_int(HEIGHT,H1).
  141.  
  142.   /* Relationships about lakes */
  143.   db(lake,in,state,LAKE,STATE):-    lake(LAKE,_,LIST),member(STATE,LIST).
  144.   db(state,with,lake,STATE,LAKE):-    lake(LAKE,_,LIST),member(STATE,LIST).
  145.   db(area,of,lake,AREA,LAKE):-        lake(LAKE,A1,_),str_real(AREA,A1).
  146.  
  147.   /* Relationships about roads */
  148.   db(road,in,state,ROAD,STATE):-    road(ROAD,LIST),member(STATE,LIST).
  149.   db(state,with,road,STATE,ROAD):-    road(ROAD,LIST),member(STATE,LIST).
  150.  
  151.   db(E,in,continent,VAL,usa):-        ent(E,VAL).
  152.   db(name,of,_,X,X):-            bound(X).
  153.  
  154. INCLUDE "geobase.inc" /* Include parser + scanner + eval + Menusystem */
  155.