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
   10   11   12   13   14   15   16   17   18   19   20