Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot. Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot.

Базы данных на Турбо-Прологе (prolog)

19 сентября 2010, 03:00

Нашел на своей  "учебной" флешке решенные задачи на Турбо-Прологе, на этом  сайте выложу все  решения по дисциплине RLP (Рекурсивно-логическое программирование).

Записать данные на Прологе и ответить на поставленные вопросы.

А) База данных «Рождение и хобби друзей»:
рождение(иванова,лена,22,июнь,1971).
рождение(петров,сергей,25,октябрь,1973).
рождение(сидорова,оля,1,декабрь,1974).
любит(иванова, лена, книги).
любит(иванова,лена,танцы).
любит(петров,Сергей, видео).
любит(сидорова,оля,кино).

Сформулировать вопросы на Прологе:
Кто родился в 1971 году?
Кто родился в октябре?
Кто любит книги?
Кто любит и книги и танцы?

Б) База данных «Колобок»:
ушел(колобок,дедушка).
ушел(колобок .бабушка).
ушел(колобок, заяц).
ушел(колобок,волк).
ушел(колобок, медведь).
не_ушел(колобок,лиса).

Указать ответы на следующие вопросы:
ушел(колобок,бабушка). — Ушел колобок от бабушки?
ушел(К,волк). — Кто ушел от волка?
не_ушел(колобок,Х). — От кого не ушел колобок?

Сформулировать вопросы на Прологе:
Кто ушел от волка?
Кто не ушел от лисы?
Кто ушел от золка и от бабушки?
Какой следует задать вопрос, чтобы узнать всех персонажей сказки?

В) Построить базу данных «Важнейшие события Древнего Мира» на основе установленных фактов, произошедших с 31 по 6 век до нашей эры. Каждый факт приводить в виде событие(Х,У,Z), где X — название государства, где произошло со¬бытие, У — в каком веке произошло событие, Z — какое про¬изошло событие.

В 31-м веке до нашей эры возникли первые города-государст¬ва. Единое государство в Египте образовалось в 30 веке до нашей эры. В 27 веке до нашей эры в Индии появились пер¬вые древнейшие города, а в Египте построена пирамида Хеоп¬са. Первые греческие государства появились в 18 веке до нашей эры. В этом же веке в Египте произошло крупное вос¬стание бедняков и рабов. В 15 веке до нашей эры появились первые государства в Китае. Тутмос III правил в Египте в 15 веке до нашей эры. Греция вела троянскую войну в 13 веке до нашей эры. Вторжение борийских племен в Грецию произо¬шло в 11 веке до нашей эры. В 8 веке до нашей эры был осно¬ван город Рим. Олимпийские игры стали проводиться в Гре-ции в 8 веке до нашей эры. В 6 веке до нашей эры в Риме была установлена республика, а в Греции произошли реформы Со¬лона. В этом же веке персы взяли Вавилон в Междуречье и за¬воевали Египет.

Продумать запросы, которые можно задать к этой базе дан¬ных.

Г) Данные о крупных реках России сведены в таблицу:

Название рекиДлина, кмГодовой сток, кмПлощадь бассейна, тыс. км2ИстокиКуда впадает
Амур 4416 350 1855 Яблоневый хребет Татарский пролив
Лена 4400 488 2490 Байкальский хребет Море Лаптевых
Обь 4070 400 2990 Предгорья Алтая Карское море
Иртыш 4248 323 1643 Китай Обь
Енисей 3487 600 2580 Восточный Саян Карское море
Волга 3530 255 1360 Валдайская возвышенность Каспийское море
Колыма 2129 44 643 Хребет Черского Восточно — сибирское море
Урал 2428 54 231 Южный Урал Каспийское море
Дон 2200 45 504 Средне-русская возвышенность Азовское море
Кама 1805 130 507 Верхне — Камская возвышенность Волга
Печора 1809 130 322 Северный Урал Баренцево море
Ангара 1779 62 1039 Байкал Енисей
Селенга 1024 14 447 Монголия Байкал
Кубань 870 11 58 Кавказ Азовское море
Нева 74 281 Ладожское озеро Балтийское море

Составить базу данных и ответить на следующие вопросы:
1)Определить реки, впадающие в Азовское море.
2)Определить реки, исток которых находится на Валдайской возвышенности.
3)Какие реки впадают в Каспийское море?
4)Какие реки короче Камы?
5)Какие реки длиннее Иртыша?
6)Как задать вопрос, определяющий все данные о какой-либо реке?

Решение:

 

domains

/* A */
 obj = symbol
 data = integer
/* ----------------------------------- */

predicates

/* A */
birth(obj,obj,data,obj,data)
like(obj,obj,obj)
/* ------------------------------------ */

/* B */
go(obj,obj)
no_go(obj,obj)
/* ------------------------------------ */

/* C */
sobitie(obj,data,obj)
/* ------------------------------------ */

/* D */
reki(obj,data,data,data,obj,obj)
/* ------------------------------------ */

clauses
/* A */
birth("ivanova","lena",22,"iun",1971).
birth("petrov","sergay",25,"okt",1973).
birth("sidorova","olya",1,"dec",1974).
like("ivanova","lena","book").
like("ivanova","lena","dance").
like("petrov","sergay","video").
like("sidorova","olya","kino").
/* ------------------------------------ */

/* B */
go("kolobok","grfather").
go("kolobok","grmother").
go("kolobok","zayc").
go("kolobok","volk").
go("kolobok","medved").
no_go("kolobok","lica").
/* ------------------------------------ */

/* C */
sobitie("egiped",30,"edinoe gos-vo").
sobitie("india",27,"pervie drevnie gos-va").
sobitie("egiped",27,"piramida Xeopca").
sobitie("egiped",18,"vosstanie rabov").
sobitie("egiped",15,"Tutmos III").
sobitie("egiped",6,"zavoevan persami").
sobitie("grecia",18,"pervie gos-va").
sobitie("grecia",13,"trouanskaya voina").
sobitie("grecia",11,"vtorgenie boriyskix plemen").
sobitie("grecia",8,"olimpian games").
sobitie("grecia",6,"reforma Solomona").
sobitie("kitau",15,"pervie gos-va").
sobitie("rim",8,"osnovan gorod").
sobitie("rim",6,"respublic").
sobitie("megdyreche",6,"zavoevan persami").
/* ------------------------------------ */

/* D */
reki("amur",4416,350,1855,"yabloneviy xrebet","tatarsky proliv").
reki("lena",4400,488,2490,"Baikalskiy xrebet","more Laptevix").
reki("Ob",4070,400,2990,"predgoria Altai","Karskoe more").
reki("Irtish",4228,323,1643,"Kitai","Ob").
reki("Enisei",3487,600,2580,"vostochnii Saian","Karskoe more").
reki("Volga",3530,255,1360,"Valdaiskia vozv","Kaspian more").
reki("Kolima",2129,44,643,"xrebet Cherskogo", "Vostochno-sibirskoe more").
reki("Ural",2428,54,231,"Ugnii Ural","Kaspian more").
reki("Don",2200,45,504,"Sredne-russkai vozv","Azovskoe more").
reki("Kama",1805,130,507,"Verxne-Kamskaia vozv","Volga").
reki("Pechora",1809,130,322,"Severn Ural","Barencevo more").
reki("Angora",1779,62,1039,"Baikal","Enisei").
reki("Selenga",1024,14,447,"Mongolia","Baikal").
reki("Kuban",870,11,58,"Kavkaz","Azovskoe more").
reki("Neva",74,0,281,"Ladogskoe ozero","Baltiiskoe more").
/* ------------------------------------ */

 

Базы данных на Турбо-Прологе (prolog)