Page 15 - 4800
P. 15
зрозумілим, що Козлов працює в тому ж відділі, що і Петренко. А якщо це так, то
відповідно, має більш одного колеги, на відміну від відповіді системи. Тобто системи
самостійно не може дійти такого висновку.
А на запит work(„Козлов”, Оffice) система взагалі дасть негативну відповідь. У
наявності суперечливість даних. Частково виправити ситуацію можна, якщо
довизначити предикат work у такій редакції
work(Man_1, N):- unite(Man_1, Man_2, labour), work(Man_2, N).
Тоді на запит про номер відділу, де працює Козлов і його колег система буде
давати більш точні відповіді. Але в базі work() відсутні дані про Козлова у вигляді
фактів, тобто в явному вигляді. Отже, після нашого довизначення ця база стала не
зовсім явною, тому що частина даних зберігається в явному вигляді, а частина виведена
з інших на основі правил. У першому наближенні – це вже прообраз бази знань. Таким
чином повний текст програми матиме вигляд:
/* програма 1.4 */
domains
name,firm=symbol
office=integer
object=labour; hobby(name); project(name,firm)
predicates
work(name, office)
colleague(name, name)
unite(name, name, object)
all_colleague(name, name, object)
clauses
colleague(Man1, Man2) :- work(Man1, X), work( Man2, X), Man1<>Man2.
all_colleague(X, Y, Z):- colleague(X,Y), Z=labour.
all_colleague(X, Y, Z) :- unite(X, Y, Z).
all_colleague(X, Y, Z) :- unite(Y, X, Z).
unite(„Возняк”, „Денега”, labour ).
unite(„Петренко”, „Скрипник”, project("New system",ics)).
unite(„Козлов”, „Петренко”, labour).
unite(„Савюк” , „Петренко”, hobby(sport)).
work(„Грищенко”, 101).
work(„Кардаш”, 111).
work(„Петренко”, 101).
work(„Скрипка”, 101).
work(Man1, N):-unite(Man1, Man2, labour), work(Man2, N).
1.8 Зміст звіту з лабораторної роботи
1. Вказати номер, тему й мету лабораторної роботи.
2. Дослідити роботу програм 1.1, 1.2, 1.3, результати навести в звіті.
3. Розробити програму згідно з індивідуальним завданням (додаток Б).
4. Модифікувати розроблену базу знань з використанням структур.
5. Текст та результати роботи програм навести в звіті.
15