Основой командного интерпретатора является процедура explore; Goal, Trace, Answer)
Эта процедура находит в стиле обратного логического вывода ответ Answer на указанный вопрос Goal с использованием принципов, описанных в разделе 16.2.2. Для этого она находит Goal как факт в базе знаний, или применяет к базе знаний некоторое правило, или запрашивает пользователя, или обрабатывает Goal как комбинацию подцелей, соединенную операторами AND или OR
366 Часть II. Применение языка Prolog в области искусственного интеллекта
• Назначение и структура параметров этой процедуры описаны ниже.
• Goal. Это - рассматриваемый вопрос, представленный в виде комбинации простых высказываний, связанных операторами AND/OR, например, следующим образом:
(X has feathers) or {X flies} and (X lays eggs)
• Trace. Это — цепочка дочерних целей и правил, соединяющая текущую цель
Goal с первоначальной целью верхнего уровня и представленная как список
элементов в форме:
Goal by Rule Это означает, что выполнена проверка цели Goal с помощью правила Rule. Например, допустим, что целью верхнего уровня является "peter isa tiger" (Питер - тигр), а проверяемой в данный момент целью является "peter eats meat" (Питер питается мясом). Соответствующая трассировка, сформированная согласно базе знаний, которая приведена в листинге 16.1, показана ниже. t (peter isa carnivore) by rule3, (peter isa tiger) by rule5 ]
Эта трассировка означает следующее.
• Я могу использовать правило "peter eats meat", чтобы проверить с помощью правила rule3 истинность высказывания "peter isa carnivore" (Питер — плотоядное животное). Кроме того, я могу использовать высказывание "peter isa carnivore", чтобы проверить с помощью правила ruleS истинность высказывания "peter isa tiger".
• Answer. Это — дерево доказательства (т.е. дерево решения AND/OR) для вопроса Goal. Общая форма ответа Answer состоит в следующем:
Conclusion was Found
где Found представляет обоснование для заключения Conclusion. Ниже приведены три примера ответов, иллюстрирующих различные ситуации, возникающие при формировании ответов.
1. Обнаружен факт:
(connected| heater, fusel) is true) was 'found as a fact1
2. Получен ответ на запрос к пользователю; (peter eats neat) is false was told
3. Сформирован логический вывод на основании имеющихся и полученных сведений:
(peter isa carnivore) i3 true was ('derived by' rule3 from (peter isa mammal) is true was ('derived by- rulel from (peter has hair) is true was told) and (peter eats meat) is true was told)
Код процедуры explore на языке Prolog приведен в листинге 16.3. В этом коде реализованы принципы, описанные в разделе 16.2.2, с использованием структур данных, указанных выше.
Листинг 16.3. Основная процедура командного интерпретатора экспертной системы
Процедура t % explore(Goal, Trace, Answer)
% находит ответ Answer, соответствующий заданной цели Goal, где Trace - цепочка
% родительских целей и правил, с помошьп которых процедура explore пытается
% кайти содержательный ответ на вопрос. Ответ Answer может принять ложное
I значение, только если ОЫЛИ проверены все варианты и для всех ник получен
I ложный результат
:- ор(900, xfx,::).
Глава 16. Командный интерпретатор экспертной системы
- op ( | 800, | xfx, | was). |
- op ( | 870, | fx, | |
- op ( | 880, | xfx, | then). |
- Op ( | 550, | xf у, | or). |
- op ( | 540, | xfy, | and). |
- op( | 300, | fx, | 'derivedby') |
- op ( | 600, | xfx, | from). |
- op( | 600, | xfx, | by). |
% в этой программе предполагается, что директивы ор(700, xfx, is) 4 и op! 900, fx, not) уже введены
explore! Goal, Trace, Goal is true was ' found as a fact'):-fact:: Goal.
Ь Предполагается, что для цели каждого типа предусмотрено только одно правило
Goall |
explore! Goal, Trace,
•derived by' Rule from Answer]:- Правило Rule, соответствующее цели Goal Trace], Answer), |
Goal is TruthValue was
Rule:: if Condition then Goal,
explore [ Condition, [Goal by Rule
!, |
truth{ Answer, TruthValue). explore) Goall and Goal2, Trace, Answer)
explore С Goall, Trace, Answerl),
continues Answerl, Goall and Goal2, Trace, Answer). explore! Goal] or Goal2, Trace, Answer]:-
exploreyes! Goall, Trace, Answer) - Ответ, соответствующий
exploreyes! Goal2, Trace, Answer). l Ответ, соответствующий цел:' Goal2 explore(Goall or Goal2, Trace, Answerl and Answer2):-!, not exploreyes! Goall, Trace, J),
not exploreyes i Goal2, Trace, _~), ': Соответствующий ответ отсутствует explore(Goall, Trace, Answerl), Ответ Answerl должен Сыть ложным explore (Goal2, Trace, Answer2). % Ответ Answer; должен быть ложным explore! Goal, Trace, Goal is Answer was -old):-
useransweri Goal, Trace, Answer).! Ответ, предоставленный пользователем
exploreyes! Goal, Trace, Answer):-
explore! Goal, Trace, Answer),
positive! Answer). continue! Answerl, Goall and Goal2, Trace, Answer):-
positive! Answerl),
explore! Goal2, Trace, Answer2), {positive С Answer2!,
Answer = Answerl and Answer2
: - |
TruthValue) |
negative!. Answer2),
Answer = Answer2
). continue; Answerl, Goall and Goal2, _, Answerl)
negative! Answerl). trutht Question is TruthValue was Found, truth [ Answerl andAnswer2, TruthValue)
truth(Answerl, true),
truth! Answer2r true], I,
TruthValue - true
: -
!.
TruthValue = false. positive(Answer):-
truth I Answer, true). negative{ Answer):-
truth С Answer, false).
getreply! Reply):-read (Answer), means С Answer, Reply),!
% Ответ имеет смысл для программы?
Часть II. Применение языка Prolog в области искусственного интеллекта
i
nl, write('Answer unknown, try again please'), nl, % Нет
getreply(Reply). % Сделать еще одну попытку
means(yesr yes). means { y, yes),. means { no, no). means in, no). means! why, why). meansI w, why).