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