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

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

17 ноября 2010, 01:04

Остальные лабы на этом сайте в категории RLP. Данная лабораторная будет под номером 4 у нас в институте.

Записать данные и правила на Прологе и ответить на поставленные вопросы. Продумать запросы, которые можно задать к этой базе знаний.

1. База знаний «Золотой ключик»:
взрослый(папа_карло,.шарманщик).
взрослый(джузеппе,столяр).
взрослый(карабас_барабас,хозяин_театра).
взрослый(дуремар,продавец_пиявок).
животное(алиса,лиса).
животное(артемон,собака_пудель).
животное(базилио,кот).
животное(тортила.черепаха).
кукла(буратино).
кукла(пьеро).
кукла(мальвина).
кукла(арлекин).
плохой(карабас_барабас).
плохой( дуремар).
хороший(Х): -взрослый(Х), not(плохой(Х)).

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

2. База знаний «Шерлок Холмс и доктор Ватсон»:
мистер(ватсон).
мистер(холмс).
миссис(хадсон).
дружит(ватсон,холмс).
дружит(ватсон,хадсон).
дружит(холмс,.хадсон).
дружит(Х,У) :- дружит(У,Х).
приятель(Х,У) :- мистер(Х), мистер(У), not(Х=У), дружит(Х,У).

Сформулировать вопросы на Прологе:
С кем дружит Холмс?
Кто дружит с Хадсон?
Кто является приятелем Ватсона?
Кто приятель Хадсон?

3. Сформировать базу знаний «Квартет» из следующих фактов и правил:
Мартышка играет на скрипке. Осел играет на альте. Козел играет на виолончели. Мишка играет на контрабасе. Четверо музыкантов X, Y, Z и W могут образовать квартет, если один из них играет на скрипке, другой — на альте, третий — на виолончели и четвертый — на контрабасе.
Ответить на вопросы:
Кто играет на альте?
На чем играет мартышка?
Образуют ли квартет Мартышка, Осел, Козел и Мишка?
Кто из музыкантов данной базы знаний может образовать квартет?

4. База знаний «Воинская служба»:
возраст(борис, 18).
возраст(андрей, 17).
возраст(михаил, 18).
возраст(анна, 18).
возраст(юлия, 17).
мужчина(андрей).
мужчина(борис).
мужчина(михаил).
женщина(анна).
женщина(юлия).
подлежит_призыву(Х) :- мужчина(Х), возраст(Х,У), У=18.
не_подлежит_призыву(Х) :- not(подлежит_призыву(Х)).

Сформулировать вопросы на Прологе:
Кто подлежит призыву?
Подлежит ли призыву Анна?

5. База знаний «Семья»:
мать(екатерина,юлия).
мать(екатерина,мария).
мать(анна,екатерина).
отец(петр,юлия).
отец(виктор,петр).
отец(андрей,екатерина).
дед(X,Y) :- отец(X,Z),мать(Z,Y).
дед(X,Y) :- отец(X,Y),отец(Z,Y).
бабка(X,Y) :- мать(X,Z),мать(Z,Y).
бабка(X,Y) :- мать(X,Z),отец(Z,Y).

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

Составить правила:
X является ребенком У.
X является сестрой У.
X является братом У.

6. Построить базу знаний «Рабочая смена»:
Мария работает в дневную смену. Сергей работает в вечернюю смену. Борис работает в вечернюю смену. Валентина работает в вечернюю смену. Два служащих знают друг друга, если они работают в одну смену.
Определить:
1)Знает ли Сергей Бориса?
2)Кого знает Валентина?
3)Кого знает Мария?

7. Даны факты:
содержит(иванов,животное(васька,кот,черный)).
содержит(петров,животное(бусик,кот,серый)).
содержит(сидоров,животное(резвый,собака,серый)).
содержит(иванов, животное(барс, кот,серый)).
содержит(иванов,животное(белка,кошка,белый)).

Добавить правило:
цвет_животного(X,Y), где X — кличка, Y — цвет животного.
Сформулировать вопросы, позволяющие:
определить клички всех животных серого цвета;
найти хозяев, у которых животные не серого цвета;
определить кличку животного белого цвета;
каких животных держит Иванов?

8. Составить базу знаний «Знакомства» из следующих фактов и правил:
Мери прелестна. Джон добрый. Джон мужественный. Джон сильный. Некто счастлив, если богатый или нравится женщинам. Мужчина нравится женщине, если женщина нравится мужчине и он добрый, либо мужчина добрый и сильный. Мужчине нравится женщина, если она прелестна.

Сформулировать вопрос: счастлив ли Джон?
Найти мужчин, которые могут нравиться женщинам.

9. Построить базу знаний и сформулировать к ней вопросы, основываясь на следующих утверждениях:
Резвый — это собака. Рекс — это собака. Белка — это кошка. Быстрая — это лошадь. Резвый — черная. Белка — белая. Рекс — рыжая. Быстрая — белая. Домашние животные — это собака или кошка. Животные — это либо лошадь, либо домашние животные. Том владеет тем, кто собака и не черного цвета. Кейт владеет тем, кто либо черного цвета, либо лошадь.

10. Построить базу знаний.
Муська — коричневая кошка, Стрелка — черная кошка, Мурка — рыжая кошка. Рекс, Дружок и Мухтар — собаки. Дружок — рыжая, Мухтар — белая. Все животные, которыми владеют Анатолий и Николай, имееют родословные. Анатолий владеет всеми черными и коричневыми животными, а Николай владеет всеми собаками небелого цвета, которые не являются собственностью Анатолия. Иван владеет Муркой, если Николай не владеет Муськой и если Мухтар не имеет ро¬дословной. Рекс — пятнистая собака.

Определить, какие животные не имеют хозяев.

11. Построить базу знаний, отражающую следующие характеристики и родственные связи древнегреческих богов:
Зевс — отец Ареса. Гера — мать Ареса. Арес — отец Гармонии. Афродита — мать Гармонии. Карид — отец Семелы. Зевс — отец Диониса. Семела — мать Диониса. Божества — Зевс, Гера, Арес, Афродита. Гармония — царица.
Определить правила: женщина, мужчина, родитель, родители, дедушка, бабушка.

12. Даны результаты сдачи экзаменов для группы студентов математического факультета:

Фамилия Математический анализГеометрия Алгебра
Антонов 5 5 5
Бобров 5 3 2
Вяткин 5 5 5
Дедов444
Емельянова555
Кротов 2 3 3
Марьин545
Новиков232
Подлесный233
Полежаев555
Соснин 4 4 4

Построить базу знаний о результатах экзаменов, определив в ней следующие правила:
отличник — это человек, у которого по всем предметам пятерки;
двоечник — если есть хотя бы одна двойка;
математик — если по алгебре, геометрии и матанализу учится на 4 и 5.

Получить ответы на следующие вопросы:
Является ли Новиков отличником?
Определить всех отличников.
Определить всех двоечников.
Является ли Соснин математиком?
Определить всех неуспевающих по матанализу.
Определить всех двоечников.

Решение:

domains
 S = symbol
 I = integer
 Animal_str = k(S,S,S)
predicates
soderjit(S,Animal_str)
color_animal(S,S)

 old(S,S)
 animal(S,S)
 doll(S)
 bad(S)
 good(S)

 mister(S)
 missis(S)
 friend(S,S)
 priatel(S,S)

 animal_kv(S,S)
 kvartet(S,S,S,S)

 vozr(S,I)
 man(S)
 woman(S)
 priziv(S)
 no_priziv(S)

 mother(S,S)
 father(S,S)
 ded(S,S)
 baba(S,S)
 sisbro(S,S)

 person(S,S)
 known(S,S)

 fact(S,S)
 dom_animal(S)
 animals(S)
 vlad(S,S)

 mans(S)
 womans(S)
 rod(S,S)
 rod(S,S,S)
 ded1(S,S)
 baba1(S,S)

 m(S)
 w(S)
 kach(S,S)
 likesM(S,S)
 likesW(S,S)
 chast(S)

 four_12(S,I,I,I)
 otl(S)
 neyd(S)
 math(S)

f(S,S,S)
anatolii(S,S)
nikolai(S,S)
rodosl(S)
ivan(S)
no_home(S)

clauses
 old("papa_carlo","sharmanka").
 old("dzugeppe","stol9r").
 old("karabas_barabas","hoz9in teatrta").
 old("duremar","prodavec_pu9vok").
 animal("alisa","lica").
 animal("artemon","sobaka_pudel").
 animal("basilio","kot").
 animal("tortilla","cherepaxa").
 doll("buratino").
 doll("piero").
 doll("malvina").
 doll("arlekin").
 bad("karabas_barabas").
 bad("duremar").
 good(X):-old(X,_),not(bad(X)).

 mister("vatson").
 mister("holms").
 missis("hadson").
 friend("vatson","holms").
 friend("vatson","hadson").
 friend("holms","hadson").
 friend(X,Y):-friend(Y,X),!.
 priatel(X,Y):-mister(X),mister(Y),X<>Y,friend(X,Y).

 animal_kv("martishka","skripka").
 animal_kv("ocel","alt").
 animal_kv("kozel","violonchel").
 animal_kv("medved","kontrabas").
 kvartet(X,Y,Z,W):-animal_kv(X,X1),animal_kv(Y,Y1),animal_kv(Z,Z1),animal_kv(W,W1),
X1="skripka",Y1="alt",Z1="violonchel",W1="kontrabas".

vozr("boris",18).
vozr("andry",17).
vozr("mixail",18).
vozr("anna",18).
vozr("ula",17).
man("andry").
man("boris").
man("mixail").
woman("anna").
woman("ula").
priziv(X):-man(X),vozr(X,Y),Y=18.
no_priziv(X):-vozr(X,_),not(priziv(X)).

mother("ekaterina","ula").
mother("ekaterina","maria").
mother("anna","ekaterina").
father("petr","ula").
father("victor","petr").
father("andry","ekaterina").
ded(X,Y):-father(X,Z),mother(Z,Y).
ded(X,Y):-father(X,Z),father(Z,Y).
baba(X,Y):-mother(X,Z),father(Z,Y).
baba(X,Y):-mother(X,Z),mother(Z,Y).
sisbro(X,Y):-father(Z,X),father(Z,Y); mother(Z,Y),mother(Z,X).

person("Maria","day").
person("Boris","night").
person("Sergay","night").
person("Valentine","night").
known(X,Y):-person(X,M),person(Y,M),X<>Y.

fact("rezvii","sobaka").
 fact("reks","sobaka").
 fact("belka","cat").
 fact("bistr","lowad").
 fact("rezvii","black").
 fact("belka","white").
 fact("reks","rija9").
 fact("bistr","white").
 dom_animal(X):-fact(X,"cat");fact(X,"sobaka").
 animals(X):-dom_animal(X);fact(X,"lowad").
 vlad("TOM",X):-fact(X,"sobaka"),not(fact(X,"black")).
 vlad("keut",X):-fact(X,"black");fact(X,"lowad").

 mans("zeus").
 mans("ares").
 mans("karid").
 mans("dionis").
 womans("gera").
 womans("garmonia").
 womans("afrodita").
 womans("semela").
 rod("zeus","ares").
 rod("gera","ares").
 rod("ares","garmonia").
 rod("afrodita","garmonia").
 rod("karid","semela").
 rod("zeus","dionis").
 rod("semela","dionis").
 rod(X,Y,Z):-mans(X),womans(Y),rod(X,Z),rod(Y,Z).
 ded1(X,Z):-mans(X),rod(X,Y), rod(Y,Z).
 baba1(X,Z):-womans(X),rod(X,Y), rod(Y,Z).

 m("jon").
 w("mari").
 kach("jon","dobr").
 kach("jon","siln").
 kach("jon","myjest").
 kach("mari","prelest").
 likesM(X,Y):-m(X),w(Y),kach(Y,"prelest").
 likesW(X,Y):-likesM(X,Y),kach(X,"dobr").
 likesW(X,Y):-m(X),w(Y),kach(X,"dobr"),kach(X,"siln").
 chast(X):-kach(X,"rich").
 chast(X):-w(Y),likesW(X,Y).

 four_12("antonov",5,5,5).
 four_12("bobrov",5,3,2).
 four_12("V9tkin",5,5,5).
 four_12("dedov",4,4,4).
 four_12("emel'9nova",5,5,5).
 four_12("krotov",2,3,3).
 four_12("mar'in",5,4,5).
 four_12("novikov",2,3,2).
 four_12("podlesiy",2,3,3).
 four_12("polejaev",5,5,5).
 four_12("sosnin",4,4,4).
 otl(X):-four_12(X,5,5,5).
 neyd(X):-four_12(X,2,_,_);four_12(X,_,2,_);four_12(X,_,_,2).
 math(X):-four_12(X,Y,Z,G),Y>=4,Z>=4,G>=4.

f(muska,cat,kor).
f(strelka,cat,black).
f(murka,cat,red).
f(reks,dog,patn).
f(drujok,dog,red).
f(muxtar,dog,white).
anatolii(X,Y):-f(X,Y,black);f(X,Y,kor).
nikolai(X,Y):-f(X,dog,Y),not(Y=white),not(anatolii(X,Y)).
rodosl(X):-anatolii(X,_);nikolai(X,_).
ivan(X):-X=murka,not(nikolai(muska,_)),not(rodosl(muxtar)).
no_home(X):-f(X,_,_),not(anatolii(X,_)),not(nikolai(X,_)),not(ivan(X)).

soderjit("ivanov",k("vaska","kot","black")).
soderjit("ivanov",k("bars","kot","seriy")).
soderjit("ivanov",k("belka","kiska","white")).
soderjit("petrov",k("bysik","kot","seriy")).
soderjit("sidoriv",k("rezv","sobaka","seriy")).
color_animal(X,Y):-soderjit(_,k(X,_,Y)).

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