X ' КЛАССЫ 1 КЛАССИФИКАЦИЯ
9
10
11
12
13
14
15
Приложение Б
ПОДПРОГРАММЫ ДИАГНОСТИКИ
Добавив экраны, приведенные в настоящем разделе, к описанному в
приложении А прологоподобному расширению Форта, вы получите систему,
которая выполняет интерпретацию правил, ведет диалог с пользователем и
поддерживает функционирование рабочей памяти.
Реализация новых подпрограмм дополнительно потребовала введения
следующих новых списков:
1. ГИПОТЕЗЫ. Сюда заносятся гипотезы, подлежащие проверке системой.
Среди них могут оказаться и конечные заключения ( см. экран 80 ).
2. ЗАКЛЮЧЕНИЯ. Короткий список, содержащий конечные заключения.
3. ФАКТЫ. Этот список используется как рабочая память или база данных
для истинных утверждений.
В приводимом расширении " главным" является слово ДИАГНОЗ. Оно пытает-
ся доказать гипотезы, поочередно помещая каждую в список ЦЕЛИ и выполняя ее
сопоставление с имеющимися предложениями. Доказательство проводится обратным
" методом, реализованным словом (ПОИСК). Если гипотеза оказывается верной,
процедура ДИАГНОЗ завершает свою работу и выдает конечное заключение.
Здесь мы имеем дело с модифицированным вариантом слова (ПОИСК),
допускающим диалог с пользователем и применение рабочей памяти.
Каждую цель процедура (ПОИСК) в первую очередь старается найти в спис-
ке ФАКТЫ (как уже доказанную) с помощью слова НАЙТИ-ФАКТ?, которое пред-
ставляет собой несколько модифицированный алгоритм слова НАЙТИ-
ПРЕДЛОЖЕНИЕ? . Если цель в списке ФАКТЫ не обнаружена, подпрограмма
(ПОИСК) пытается подыскать правило, используя слово НАЙТИ-ПРЕДЛОЖЕ-
НИЕ? . Если и этот поиск завершается неудачей, пользователю выдается запрос на
продолжение верификации. При получении на запрос ответа " Y" (" Да" ) цель до-
бавляется к списку ФАКТЫ как истинное утверждение. В том случае, когда выда-
ется ответ " N" (" Нет" ), программа (ПОИСК) возвращается по списку РЕШЕНИЯ
на один уровень выше текущего и продолжает функционирование.
Итак, в результате внесенных изменений имеем:
(ПОИСК) модифицировано
СЛЕД модифицировано
ПОИСК модифицировано
ПОЛУЧ-ГИП получение гипотезы (аналогично слову ПОЛУЧИТЬ - ЦЕЛЬ)
НАЙТИ-ФАКТ? попытка обнаружения факта в списке ФАКТЫ аналогично
287
слову НАЙТИ-ПРЕДЛОЖЕНИЕ?
ДИАГНОЗ вновь определенное слово высокого уровня
ДИАЛОГ получает ответ пользователя
Примечание. Проще добавлять доказанные факты к предложениям (а не к
списку ФАКТЫ), но в нашей системе это невозможно. ПРЕДЛОЖЕНИЯ -
список списков, и вы не можете внести цель в данный список без создания для нее
отдельного списка с последующим его присоединением к списку предложений.
Наша система не позволяет создавать списки в динамике. Вы всегда можете
определить с помощью команды ВЫДАТЬ, является ли некий объект атомом или
списком. Если выданный объект заключен в круглые скобки, он является списком, в
противном случае - атомом. Применяя выражение " ПОЛУЧИТЬ-ЦЕЛЬ ВЫДАТЬ",
мы получаем атом - верхний элемент списка ЦЕЛИ. С помощью же выражения
" ПРЕДЛОЖЕНИЯ @ ВЫДАТЬ" мы получаем список.
Поскольку наша система диагностики считается базовой, может возникнуть
потребность расширить ее следующим образом:
1. Добавить слово, которое при включении факта в список ФАКТЫ выдавало
бы след проведенного рассуждения для проверки, появились ли вследствие
добавления этого факта новые доказанные заключения, и если они появились,
присоединяло бы их к списку ФАКТЫ. Например, если доказано утверждение
ИМЕЕТ-ОПЕРЕНИЕ, то заключение ЭТО-ПТИЦА должно быть внесено в список
фактов, причем все вхождения выражения " ФАКТЫ СВЯЗЬ" в программу
(ПОИСК) должны быть заменены вводимым словом.
2. Добавить новый список ФАКТЫ, в котором запоминались бы неистинные
факты. В прежней реализации системы в список ФАКТЫ заносились истинные
факты, что не давало возможности задавать один и тот же вопрос при проверке
следующей гипотезы. Если же факт признавался ложным, он не сохранялся и
вопрос повторно задавался во время обоснования других гипотез. Требуется
модификация программы (ПОИСК) с тем, чтобы она проверяла и новый список.
Можно изменить наполнение базы знаний, приведенной на экранах с 80 по
83. Например, вы можете реализовать базу знаний для диагностики неисправности
автомобиля. Каковы при этом конечные гипотезы? Какие симптомы неисправностей
нужно учитывать? Что выбрать в качестве промежуточных целей?