Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

Пользователей: 13,370
новичок: dogoco6
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы аэропорта на GPSS + Пояснительная записка
Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы
Моделирование процесса обработки заданий пакетным режимом работы с квант...

Пользователь может просить объяснения "почему?"


Усовершенствованная версия оболочки позволяет также успешно вести диалоги и с другой стороны. Когда программа задает вопрос, пользователь может ответить своим собственным вопросом “почему?”. Естественным ответом оболочки должно быть правило, на основании которого программа пытается сделать вывод. Такую возможность легко ввести в оболочку, расширяя все отношения дополнительным аргументом - используемым текущим правилом. Поскольку в Пролог-программах доступ к глобальному состоянию процесса вычислений невозможен, это правило должно быть явно представлено в дополнительном аргументе.
Интерфейс для обеспечения ответа на вопрос “почему?” реализуется дополнительными правилами предиката respond. Предикат respond переписывает текущее родительское правило и приглашает пользователя ответить еще раз. Формат, в котором будет представлено это правило, определяется предикатом display_rule, позволяющим пользователю представлять правила в удобной для него форме.
Повторные ответы на вопрос “почему?”, использующие предложение respond, приводят к повторной переформулировке родительского правила. Решение состоит в выдаче прародительского правила в ответ на второй вопрос “почему?”, прапрародительского правила в ответ на третье “почему?” и так далее вверх по дереву поиска. С этой целью дополнительный аргумент содержит список правил, учитывающих предысторию.
Для учета случая, когда все правила для ответа исчерпаны, необходимо дополнительное предложение.
Трудности возникают, когда приходится объяснять использования правила A в процессе доказательства not(A). В этом случае предыстория вывода теряется, и аргумент Rules в третьем предложении respond становится неконкретизованной переменной.

% программа 7
:- multifile system/1, askable/1.
:- dynamic untrue/1.

% дополнительный аргумент - список содержащий текущее
% родительское правило и правила из предыстории
solve(true,_):-!.
solve((A,B),Rules):-!,
solve(A,Rules),
solve(B,Rules).
solve(not(A),_):-!,
not(solve(A,_)).
solve(A,Rules):-
not system(A),
clause(A,B),
solve(B,[rule(A,B)|Rules]).
solve(A,_):-
system(A),
A.
solve(A,Rules):-
askable(A),
not known(A),
ask(A,Answer),
respond(Answer,A,Rules).

system(is(_,_)).
system(_=_).
system(_<_).
system(_>_).
system(write(_)).
system(nl).

ask(A,Answer):-
display_query(A),
read(Answer).

% дополнительный аргумент - список содержащий текущее
% родительское правило и правила из предыстории

respond(yes,A,_):-
assert(A).
respond(no,A,_):-
assert(untrue(A)),fail.

% три дополнительных правила для respond

respond(why,A,Rules):-
var(Rules),!,
write(' хочу использовать ложность '),
write(A),nl,
ask(A,Answer),
respond(Answer,A,[]).
respond(why,A,[Rule|Rules]):-
write(' хочу воспользоваться правилом:'),
display_rule(Rule),
ask(A,Answer),
respond(Answer,A,Rules).
respond(why,A,[]):-
write(' <== возможности объяснения исчерпаны '),nl,
ask(A,Answer),
respond(Answer,A,[]).
known(A):-A,!.
known(A):-
untrue(A).

display_query(A):-
write(A),
write('?').

display_rule(rule(A,B)):-
nl,write('Если '),
write_conjunction(B),
write(' то '),
write(A),nl.

write_conjunction((A,B)):-
!,write(A),write(' и '),
write_conjunction(B).
write_conjunction(A):-
write(A),nl.




Вторым аргументом предиката solve(Goal,Rules) в программе 7 является список правил, используемых для редукции предковых вершин цели Goal в текущем дереве доказательства. Список правил обновляется с помощью предиката solve в процессе редукции цели. Для представления правила выбрана структура rule(A,B). Единственным предикатом, на который влияет выбор представления правила, является предикат display_rule.
Выясним рекомендации для Боба:

?- solve(hy(bob,Y),[]).




bob имеет симптом мышечные боли? why.

хочу воспользоваться правилом:
Если bob имеет симптом мышечные боли и bob имеет симптом лихорадка
то bob имеет простуда




bob имеет симптом мышечные боли? why.

хочу воспользоваться правилом:
Если bob имеет простуда и not bob имеет уязвимый возраст
то bob - рекомендовано лечь в постель и принять аспирин




bob имеет симптом мышечные боли? why.
хочу воспользоваться правилом:
Если member(лечь в постель и принять аспирин,
[лечь в постель и принять аспирин,вызвать врача])
и bob - рекомендовано лечь в постель и принять аспирин
то hy(bob, лечь в постель и принять аспирин)




bob имеет симптом мышечные боли? why.

<== возможности объяснения исчерпаны




bob имеет симптом мышечные боли? yes.
bob имеет симптом лихорадка? yes.
bob имеет признак моложе 8 лет? no.
bob имеет признак старше 60 лет? no.

Y = 'лечь в постель и принять аспирин' ;




bob имеет симптом насморк? why.

хочу воспользоваться правилом:
Если bob имеет симптом насморк и bob имеет симптом мышечные боли
и not bob имеет симптом лихорадка
то bob имеет грипп

bob имеет симптом насморк? yes.



bob имеет симптом нарывы в горле? why.

хочу воспользоваться правилом:
Если bob имеет симптом лихорадка и bob имеет симптом нарывы в горле
то bob имеет острый фарингит




bob имеет симптом нарывы в горле? yes.
Y = 'вызвать врача' ;
No



Опубликовал Kest April 04 2011 14:11:04 · 0 Комментариев · 4859 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Swing. Эффектные...
База данных: Книж...
Игра в крестики н...
C++ Builder: Книг...
Учебник по создан...
Реализация ЭЦП по...
Error mod
Delphi 2005 для W...
Dealer
Переработанный пл...
Правила программи...
Delphi. Готовые а...
База для Allsubmi...
mmmJlabel
Удаление своего EXE
Профессиональное ...
EMS QuickExport S...
Crypt32
netBIOS
Усложнённый кальк...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97836
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Определить номера ...
Округление по необ...
Очереди с приорите...
Встроенные элементы
Visual Studio. Ком...
Устраните самую кр...
Управление доступо...
Установка IBM WebS...
Редактор плагинов
Азино777 мобильная...
Добавление методов...
NetWare можгю, уст...
Что нужно делать п...
Аналоговый сигнал ...
Управление жизненн...
Кузовной ремонт в ...
Модули расширения ...
"Jj Issued certifi...
Организуйте службу...
Управление вызовом...
Клиентские компьют...
Создание документа...
Тематические интер...
Задачи
Обеспечение обратн...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?