Я опять к Вам за помощью со своей экспертной системой. Я уже публиковал вопрос, но к сожалению никто не ответил( я кое что добавил, выложу, надеюсь вы поможете, очень нужно!
Такая вот база данных (она же база знаний):
Для механизма вывода используется алгоритм обратного логического вывода, я его нашел в нете, вот его и пытаюсь реализовать:
Код: функция Доказана_Цель(Цель): boolean;
| Поместить Цель в стек целей.
| пока стек целей не пуст
| цикл
| | Выбор цели из стека целей и назначение ее текущей.
| | Поиск множества правил, в правой части которых
| | находится текущая цель (множества подходящих правил).
| | Считать, что Цель не доказана.
| | пока множество походящих правил не пусто
| | и Цель не доказана
| | цикл
| | | Выбор из этого множества одного текущего правила
| | | с использованием определенной стратегии.
| | | Считать текущим элементарным условием первое.
| | | пока не проверены все элементарные условия правила
| | | и не надо прервать проверку условия
| | | цикл
| | | | если в текущем элементарном условии
| | | | | участвует факт,
| | | | | встречающийся в правой части
| | | | | какого-то правила
| | | | | то
| | | | | если не Доказана_Цель(Этот факт)
| | | | | | то
| | | | | | Надо прервать проверку условия
| | | | | конец_если
| | | | иначе
| | | | | Запросить информацию о факте.
| | | | | Проверить элементарное условие.
| | | | | если элементарное условие истинно
| | | | | | то
| | | | | | Добавить факт в базу данных.
| | | | | | Перейти к следующему элементарному
| | | | | | Условию.
| | | | | иначе
| | | | | | Надо прервать проверку условия.
| | | | | конец_если
| | | | конец_если
| | | конец_цикла
| | | если условие правила истинно
| | | | то
| | | | Выполнить заключение.
| | | | Исключить Цель из стека целей.
| | | | Считать, что Цель доказана.
| | | конец_если
| | конец_цикла
| конец_цикла
конец_функции.