Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

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

Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...
Моделирование процесса передачи данных по магистрали с основным и резерв...

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


Усовершенствованная версия оболочки позволяет также успешно вести диалоги и с другой стороны. Когда программа задает вопрос, пользователь может ответить своим собственным вопросом “почему?”. Естественным ответом оболочки должно быть правило, на основании которого программа пытается сделать вывод. Такую возможность легко ввести в оболочку, расширяя все отношения дополнительным аргументом - используемым текущим правилом. Поскольку в Пролог-программах доступ к глобальному состоянию процесса вычислений невозможен, это правило должно быть явно представлено в дополнительном аргументе.
Интерфейс для обеспечения ответа на вопрос “почему?” реализуется дополнительными правилами предиката 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 Комментариев · 4794 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Blib [Исходник на...
PBEditPack
iComm v.6.1 - выв...
PHP: обучение на ...
Размещение элемен...
База англоязычных...
DiZsubmit
TrayComp
mp3tag
Профессиональное ...
Введение в станда...
AlignEdit
Strawberry Prolog...
Язык программиров...
Архив программ
Delphi 2005 для .NET
C++ Builder в за...
DFileDeleter
Программирование ...
База для Allsubmi...

Топ загрузок
Приложение Клие... 100770
Delphi 7 Enterp... 97743
Converter AMR<-... 20258
GPSS World Stud... 17013
Borland C++Buil... 14181
Borland Delphi ... 10255
Turbo Pascal fo... 7370
Калькулятор [Ис... 5967
Visual Studio 2... 5205
Microsoft SQL S... 3661
Случайные статьи
Игровые слоты на д...
Ежемесячные операции
Подробнее о внедре...
Создание анимации ...
Тип данных boolean...
Нулевая последоват...
Web-оптимизация (S...
Шаблоны
Замена подстроки с...
2.1.1. Константы
Основы алгоритмиза...
Где команда ping п...
Пример на создан»—...
Встроенные элементы
Коллекция игровых ...
Используйте систем...
Как привлечь 1000 ...
Наследование и шаб...
Формат и типы сооб...
Непосредственное в...
Атака клонов
Виртуальное казин...
Основы OLE. Термин...
Служба удаленного ...
Разработка ПО.
Статистика



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


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