Задание: создать небольшую базу знаний на языке Пролог.
Программа должна содержать:
1) не менее 10 фактов, описывающих указанные в задании отношения,
2) не менее двух-трех правил, выражающих типичные запросы пользователей,
3) должно быть сформулировано не менее трех целевых утверждений, ответы на которые необходимо отразить в отчете.
Предметная область «Столицы стран разных частей света».
Отношения-факты:
<столица> (<название столицы>, <название государства >, <число жителей столицы>),
<находится> (<название государства>, <название части света>, <площадь государства>).
Отношения-правила: в какой части света находится столица, столица государства с площадью, меньшей заданной величины, какие столицы с миллионным числом жителей находятся в данной части света и т.п.
Исходный код программы на Turbo Prolog:
domains
mesto=settle(string,string,integer).
predicates
capital(string,string,integer,mesto).
where(string,string).
country(string,string,integer).
what_capital(string,string).
clauses
%zadacha bazi faktov
capital(moscow,russia,10126000,settle(russia,europas,17075400)).
capital(paris,france,2204000,settle(france,europas,674843)).
capital(stockholm,sweden,830000,settle(sweden,europas,449964)).
capital(canberra,australia,345000,settle(australia,australia,7617930)).
capital(tokyo,japan,13010000,settle(japan,asia,377944)).
capital(cairo,egypt,7759000,settle(egypt,africa,1002450)).
capital(brasilia,brazil,26006885,settle(brazil,south_america,8514877)).
capital(ottawa,canada,812200,settle(canada,north_america,9984670)).
capital(washington,usa,600000,settle(usa,north_america,9826675)).
capital(addis_ababa,ethiopia,3385000,settle(ethiopia,africa,1104300)).
%poisk gde nahoditsya zadannaya stolica
where(Capital,Place):-capital(Capital,_,_,settle(_,Place,_)),!. %otsechenie !,chtobi ne vipolnyalos vtoroe pravilo, esli stolica bila naidenna
where(_,"dannaya stolica ne naidenna!").
%poisk strani i ee stolici s plochadyu menshe zadannoi
country(Capital,Country,SMax):-capital(Capital,Country,_,settle(_,_,S)),S
%posk stolic-millionerov v zadannoi chasti sveta
what_capital(Capital,Place):-capital(Capital,_,N,settle(_,Place,_)),N>=1000000.
%chto programma budet vipolnayt. Zdes 5 priverov, v kazdii moment dolzen bit razkomenchen odin iz nih
goal
write("Poisk gde raspolagaetsya Tokyo. Otvet: "),where(tokyo,PlaceTokyo), write(PlaceTokyo),nl.
%write("Poisk gde raspolagaetsya Shvambraniya. Otvet: "),where(shvambraniya,PlaceShv), write(PlaceShv),nl.
%write("Poisk godudarstv s ploshadyu mense 1000000. Otvet: "),nl, country(Capital,Country,1000000),write("(",Capital,",",Country,") "),nl,fail.
%write("Poisk godudarstv s ploshadyu mense 100000. Otvet: "),nl, country(Capital,Country,100000),write("(",Capital,",",Country,") "),nl,fail.
%write("Poisk stolic s millionnim chislom zitelei, nahodyashihsya s Evrope. Otvet: "),nl,what_capital(Capital,europas),write(Capital," "),nl,fail.
|