logo
TurboProlog / Документация / TOM_2

Внутренние имена объектов

Geobase должен получить внутренние имена объектов из терминов поль-

зователей. При этом возникают три проблемы:

1. Множественное число объектов. Пользователь может

использовать слово "states", которое является именем объекта

"state" с добавлением "s"; или "cities", получаемое из имени

объекта "city". Предикат "entn" предназначен для преобразования

множественного числа имен объектов в единственное.

2. Синонимы имен объектов. Пользователь может набрать

"town" вместо "city" или "place" вместо "point". Синонимы имен

объектов хранятся в предикате "synonym".

3. Составные значения объектов. Значения объектов могут

состоять более чем из одного слова, например "new york" или "salt

lake city". Geobase распознает также ситуации при грамматическом

разборе с помощью предиката "get_cmpent". Некоторые из

используемых предложений приведены ниже:

predicates

ent_name(ent,string) /*Преобразуем из имени во

внутреннее имя объекта*/

entn(string,string) /*Преобразуем в единст-

венное число*/

entity(string) /*Получаем все объекты*/

ent_synonym(string,string) /*Синонимы объектов*/

clauses

ent_name(Ent,Navn) :-

entn(E,Name),

ent_synonym(E,Ent),

entity(Ent).

ent_synonym(E,Ent) :-

synonym(E,Ent).

ent_synonym(E,E).

entn(E,N) :-

concat(E,"s",N).

entn(E,N) :-

free(E),

bound(N),

concat(X,"ies",N),

concat(X,"y",E).

entn(E,E).

entity("name") :-!.

entity("continent") :-!.

entity(X) :-

schema(X,_,_).