ЯЗык "Пролог". Понятие базы знаний, определение. Задачи и упражнения, страница 2

(Бабушка - зто мама мамы.    бабушка(Х, Y):- мама(Х, Z), MaMa(Z, Y).

Введя это правило в машину, мы сможем получить ответ на вопрос: "Кто бабушка Марии?":

По-русски:

На Прологе:

Ответ ЭВМ:

Кто бабушка Марии?

Цель: бабушка (X, мэрия).

Х=анна

По этому правилу машина сделала логический вывод о факте, которого в исходной базе данных нет. При ответе на любой вопрос машина вначале пробует найти факт, при помощи которого можно ответить. Если такого факта нет, то машина начинает применять правила. Для ответа на один вопрос может применяться несколько правил.

Для того, чтобы получить логическую связку или, можно также факты или правила, связанные ею, перечислить по отдельности.

По-русски:

На Прологе:

Бабушка - это мама мамы или мама папы.

бабушка (X, Y):- мама (X,Z), мама (Z,Y). бабушка (X, Y):- мама (X,Z), папа (Z,Y).

2.1. Базазнаний "Родственныеотношения"

Используя информацию предыдущего параграфа, попробуем создать базу знаний "Родственные отношения". При этом дополнительно включим в программу правила для определения родителей, отца и матери, дедушки и бабушки, внуков, тети, дяди, сестры, брата; отношений предокипотомок.

Программа может быть такой:

%                      База знаний

%               "Родственные отношения"

%                    Определение отношений


%                    бабушка,дедушка,внук,

%        брат, сестра, дядя, тетя, предок, потомок

domains

MMH=symbol             %тип "имя" - последовательность

% символов predicates

дети_одних_родителей(имя,имя)

мама(имя,имя)          %мама(<кто>, <чья>)

бабушка(имя,имя)       %бабушка(<кто>,<чья>)

папа(имя,имя)          %папа(<кто>,<чей>)

дедушка(имя,имя)       %дедушка(<кто>,<чей>)

внук(имя,имя)         %внук(<кто>,<чей>)

брат(имя,имя)          %брат(<кто>,<чей>)

сестра(имя,имя)        %сестра(<кто>,<чья>)

дядя(имя,имя)          %дядя(<кто>,<чей>)

тетя(имя,имя)          %тетя(<кто>,<чья>)

предок(имя,имя)        %предок(<кто>,<чей>)

потомок(имя,имя)       %потомок(<кто>,<чей>)

родитель(имя,имя)      %родитель(<кто>,<чей>)

мужчина(имя)           %мужчина(<кто>)

женщина(имя)           %женщина(<кто>) clauses

I Ж Ж Ж Ж* ж" ж ж ж ж* "ж "ж Ж^ ж1 л^ "Ж Ж Ж Ж Ж Ж "я  л" "Ж л ТС ^" 'ж«Г л 'ЯГ иГ я ТГ л" 'иГ и  л "л  "л "fr ^fr ТГ "л "я  ч" 'Ж'  /

%                                  Бабушка по материнской линии

бабушка (Имя 1, 1-1МЯ2)   :- мама (Имя1, КмяЗ) , мама(ИмяЗ, Имя2) .

%                                  Бабушка по отцовской линии бабушка(Имя1,Имя2):-мама(Имя1,ИмяЗ),папа(ИмяЗ,Имя2).

/ Ж" Л ^Л "А" "Ж Л ^ЯГ Т*Г "?Г ТГ Т*Г Ж ^fr Л1 Ж" Л "л "л" л  Ж Ж" Л Ж "Ж Ж Ж "Л" 'л Ж Ж "Ж Ж Ж Ж Ж * Ж/ 'Ж  Ж Ж^ Ж^ " Ж Ж  JS Ж"  J

%         ;    Дедушка по материнской линии дедушка(Имя1, Имя2):-папа(Имя1, №ляЗ) , мама(ИмяЗ, Имя2).

%              Дедушка по отцовской линии дедушка(Имя 1 ,Имя2):-папа(Имя 1 ,ИмяЗ),папа(ИмяЗ,Имя2).

% Внук - человек, у которого есть бабушка или дедушка внук(Имя1,Имя2) :-дедушка(Имя2, Имя1) .

внук (Имя1, Имя2) : -бабушка (Имя2 , Имя1) .

Родитель - человек, у которого есть ребенок

%            (т.е. родитель - это мама или папа)

родитель(Род,Реб) :- мама(Род, Реб) ; папа(Род,Реб) .