S_program(Ans,Res)

тоді вона побудує відповідь:

Ans = ["b", "=",...]

Res = program([assign("b", int(2)), if_then_else(var("b"),

assign("a",int(1))........])

 

8.1.Визначте два предикати парнадовжина (Список) і непарнадовжина (Список), таким чином, щоб вони були істинними, якщо їх аргументом є список парної або непарної довжини відповідно.

8.2.Визначте предикат паліндром (Список).Список називається паліндромом, якщо він читається однаково, як зправа наліво, так і зліва направо. Наприклад [м,а,д,а,м].

8.3.Визначте відношення переклад(Список1, Список2) для модифікації списка чисел від 0 до 9 в список відповідних слів.

Наприклад,

переклад ([3,1,7],[три,один,сім])

8.4.Визначте відношення лінеризація (Список1, ЛінійнийСписок), де ЛінійнийСписок - це той же список, але “вирівняний” таким чином, що елементи його підсписків складають один лінійний список.

Наприклад:

goal: лінеризація ([a,d,[c,d],[],[[[e]]],f],L).

L=[a,b,c,d,e,f].

 

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),