>
dog_is ("Great Dane"): - it_is ("довгошерста собака"), ("у неї", "низько посаджений хвіст"),
positive ("у ​​неї", "довгі вуха"),
positive ("у ​​неї", "доброзичливий характер"),
positive ("її", "вага більше 45 кг"),!.
Зауважимо, що в правилах довжина вовни може бути представлена ​​за допомогою предиката positive у вигляді:
positive ("у ​​неї", "коротка шерсть").
Але використання предиката it_is дозволяє обмежити "простір пошуку" (кількість даних, що перевіряються при пошуку рішення) одним піддерево деревовидної структури, що містить інформацію про різні породи собак.
Експертна система, що базується на правилах, дозволяє проектувальнику будувати правила, які природним чином об'єднують в групи пов'язані фрагменти знань. Кожне продукційне правило може бути незалежним від інших. Ця незалежність робить базу продукційних правил семантично модульної, тобто групи інформації не впливають один на одного. Більше того, модульність бази правил дозволяє розвивати базу знань, збільшуючи її. br/>
Лістинг
/* Програма: експерт по породах собак */
/* Це продукційна система, що базується на правилах */
/* Сістесма користувача інтерфейсу */
do_expert_job: - makewindow (1, 7, 7, "ЕКСПЕРТ ПО порід собак, 1, 16, 22, 58),
nl, write ("*********************"),
nl, write ("Ласкаво просимо!"), nl, nl,
nl, write ("Проводиться ідентифікація породи"), nl, nl,
nl, write ("Відповідайте, будь ласка, 'так' або 'ні'"),
nl, write ("а питання про собаку, породу якої"),
nl, write ("Ви хочете визначити"),
nl, write ("**********************"),, nl, do_consulting, write ("Натисніть будь-яку клавішу "),, readchar (_), removewindow._consulting: - dog_is (X),!, nl, write (" Ймовірно Ваша собака - ", X,". "),, clear_facts._consulting: - nl, write ("Вибачте, я не зможу допомогти Вам!"),
clear_facts. (X, Y): - write ("?: -", X, "", Y, "?"), readln (Reply), (X , Y, Reply).
/* Механізм виведення */(X, Y): - xpositive (X, Y),!. (X, Y): - not (negative (X, Y)),!, ask (X, Y). (X, Y): - xnegative (X, Y),!. (X, Y, yes): - asserta (xpositive (X, Y)). (X, Y, no): - asserta (xnegative (X, Y)), fail._facts: - retract (xpositive (_, _)), fail._facts: - retract (xnegative (_, _)), fail.
/* Продукційні правила */
dog_is ("Англійський Бульдог"): - it_is ("короткошерста собака"),
positive ("її", "висота в холці не більше 57 см"),
positive (В«у неї", "низько посаджений хвіст"),
positive ("у ​​неї", "доброзичливий характер"),!.
dog_is ("Гонча"): - it_is ("короткошерста собака"),
positive ("її", "висота в холці не більше 57 см"),
positive ("у ​​неї", "довгі вуха"),
positive ("у ​​неї", "доброзичливий характер"),!.
dog_is ("Німецький Дог"): - it_is ("короткошерста собака"),
positive ("у ​​неї", "низько посаджений хвіст"),
positive ("у ​​неї", "доброзичливий характер"),
positive ("її", "вага більше 45 кг"),!.
dog_is ("Американський Фоксхаунд"): - it_is ("короткошерста собака"),
positive ("її", "висота в холці не більше 77 см"),
positive ("у ​​неї", "довгі вуха"),
positive ("у ​​неї", "доброзичливий характер"),!.
dog_is ("Кокер Спанієль"): - it_is ("довгошерста собака"),
positive ("її", "висота в холці не більше 57 смВ»),
positive ("у ​​неї", "низько посаджений хвіст"),
positive ("у ​​неї", "довгі вуха"),
positive ("у ​​неї", "доброзичливий характер"),!.
dog_is ("Ірландський СетерВ»): - it_is ("довгошерста собакаВ»),
positive ("її", "висота в холці не більше 77 см"),
positive ("у ​​неї", "довгі вуха"),!.
dog_is ("Коллі"): - it_is ("довгошерста собака"),
positive ("її", "висота в холці не більше 77 см"),
positive ("у ​​неї", "низько посаджений хвіст"),
positive ("у ​​неї", "доброзичливий характер"),!.
dog_is ("...