Лабораторна робота №9

ТЕХНІКА ПРОГРАМУВАННЯ В ПРОЛОЗІ

В цьому розділі ми розглянемо базові підходи до реалізації основних типів алгоритмів в Пролозі.

 

9.1.Принципи побудови експертної системи.

Розглянемо наступну задачу. Потрібно реалізувати експертну систему, яка б визначала тварину, яку мав на увазі користувач із семи зазначених. Експертна система знайде тварину за допомогою опитування користувача. Цей приклад демонструє бектрекінг для перегляду бази даних і показує ефективне використання предикату not. Типовим діалогом користувача з експертною системою може бути наступний:

 

goal: run.

Has it hair?

Yes

does it eat meat?

Yes

has it a fawn color?

Yes

has it dark spots?

Yes

Your animal may be a (an) cheetah!

 

Для програмування діалогу потрібні два кроки. Перший крок заключається в наповненні бази системи знаннями, а результуючий - в побудові виведення відповіді. Повна програма приведена на малюнку 9.1.

 

Database

Xpositive(symbol, symbol)

Xnegative(symbol, symbol)

 

Predicates

Animal_is(symbol)

It_is(symbol)

Ask(symbol, symbol, symbol)

Remember(symbol, symbol, symbol)

Positive(symbol, symbol)

Negative(symbol, symbol)

Clear_facts

Run

 

Clauses

animal_is(cheetah) :- it_is(mammal),

It_is(carnivore),

Positive(has, tawny_color),

Positive(has, dark_spots).

animal_is(tiger) :- it_is(mammal),

It_is(carnivore),

Positive(has, tawny_color),

Positive(has, black_stripes).

animal_is(giraffe) :- it_is(ungulate),

Positive(has, long_neck),

Positive(has, long_legs),

Positive(has, dark_spots).

animal_is(zebra) :- it_is(ungulate),

Positive(has,black_stripes).

 

animal_is(ostrich) :- it_is(bird),

Negative(does, fly),

Positive(has, long_neck),

Positive(has, long_legs),

Positive(has, black_and_white_color).

 

animal_is(penguin) :- it_is(bird),

Negative(does, fly),

Positive(does, swim),

Positive(has, black_and_white_color).

animal_is(albatross) :-

It_is(bird), positive(does, fly_well).

it_is(mammal) :- positive(has, hair).

it_is(mammal) :- positive(does, give_milk).

it_is(bird) :- positive(has, feathers).

it_is(bird) :- positive(does, fly),

Positive(does,lay_eggs).

it_is(carnivore) :- positive(does, eat_meat).

 

it_is(carnivore) :- positive(has, pointed_teeth),

Positive(has, claws),

Positive(has, forward_eyes).

it_is(ungulate) :- it_is(mammal),

Positive(has, hooves).

it_is(ungulate) :- it_is(mammal),

Positive(does, chew_cud).

positive(X, Y) :- xpositive(X, Y), !.

positive(X, Y) :- not(xnegative(X, Y)),

Ask(X, Y, yes).

negative(X, Y) :- xnegative(X, Y), !.

negative(X, Y) :- not(xpositive(X, Y)),

Ask(X, Y, no).

 

ask(X, Y, yes) :- !,

write(X, " it ", Y, '\n'),

Readln(Reply),

frontchar(Reply, 'y', _),

Remember(X, Y, yes).

ask(X, Y, no) :- !,

write(X, " it ", Y, '\n'),

Readln(Reply),

frontchar(Reply, 'n', _),