Навигация
Главная
Поиск
Форум
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,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Расчет мер близости на отношениях на Delphi + Пояснительная записка
Моделирование работы крупного аэропорта на GPSS + Пояснительная записка
Моделирование информационно-поисковой библиографической системы на gpss ...

Запоминание пути вывода


Процедура "вып". Единственным аргументом процедуры "вып" (сокращение от слова "выполнить") является запрос, который эта процедура выполняет. Если выполнение запроса окажется успешным, то процедура "вып" напечатает запрос с конкретизированными переменными, а затем спросит пользователя, не желает ли он посмотреть путь доказательства или получить иной ответ. Если ответов на запрос больше не существует, то процедура "вып" потерпит неудачу.
Использование процедуры "вып". Посмотрите, как процедура "вып" отвечает на запрос к нижеследующей базе данных "разновидность", содержащей сведения о разновидностях собраний, которые включают в себя другие вспомогательные собрания:

разновидность (собрание_38, собрание_381).
разновидность (собрание_381, собрание_382).
разновидность (собрание_39, собрание_391).
?- вып (разновидность (собрание_38, X)).
разновидность (собрание_38, собрание_381)



введите символ h для просмотри пути доказательства или символ ; для получения другого ответа.

Поскольку данный запрос может быть успешно выполнен, процедура "вып" печатает его, причем переменная Х унифицирована с константой «собрание_381». Теперь, если пользователь введет символ "h", процедура "вып" пояснит, как она выполнила запрос:
h
разновидность (собрание_38, собрание_381) содержится в программе.

Объяснение. Объяснение вырабатывается следующим образом. Если запрос унифицируется с фактом, содержащимся в текущей программе, то на печать выдаются текст запроса и слова «содержится в программе». Если запрос унифицируется с правилом, входящим в текущую программу, то печатаются запрос и вопросительный знак. Далее по этой же схеме печатаются подцели данного правила. Подцели выделяются при печати с помощью отступа.
Ниже приводится пример сеанса работы с процедурой "вып", который иллюстрирует выдачу объяснений этой процедурой. Обратите внимание на то, что форма объяснений отражает форму фраз, которые используются при выполнении запроса. Транзитивное отношение "имеет_отношение_к" основывается на приведенной выше базе данных "разновидность". Отношение "имеет_отношение_к" выражает то обстоятельство, что тема одного собрания может косвенно затрагивать тему другого, т.е через тему промежуточного собрания.

имеет_отношение_к (X,Y) :-
разновидность (X,Y).
имеет_отношение_к (X,Y) :-
разновидность (X,Z),
имеет_отношение_к (Z,Y).

?- вып (имеет_отношение_к (собрание_38, X)).
имеет_отношение_к (собрание_38, собрание_381) % первый ответ



введите символ h для просмотра пути доказательства или символ ; для получения другого ответа.
h

имеет_отношение_к (собрание_38, собрание_381) ?
разновидность (собрание_38, собрание_381) содержится в программе.

имеет_отношение_к (собрание_38, собрание_381)
введите символ h для просмотра пути доказательства или символ ; для получения другого ответа.
;

имеет_отношение_к (собрание_38, собрание_382) % второй ответ
введите символ h для просмотра пути доказательства или символ ; для получения другого ответа.
h

имеет_отношение_к (собрание_38, собрание_382) ?
разновидность (собрание_38, собрание_381) содержится в программе.
имеет_отношение_к (собрание_381, собрание_382) ?
разновидность (собрание_381, собрание_382) содержится в программе.

имеет_отношение_к (собрание_38, собрание_382)
введите символ h для просмотра пути доказательства или символ ; для получения другого ответа.
;
нет

Заметьте, что процедура "вып" повторно печатает запрос после ввода пользователем символа h.
Как работает процедура "вып". Единственным аргументом процедуры "вып" является запрос, который она далее передает процедуре "вып()". Процедура "вып()" возвращает структуру вида:

п (Запрос, ПутьДоказательства)

через свой второй аргумент. Здесь «Запрос» - это исходный запрос, а «ПутьДоказательства» - это структура, описывающая шаги, необходимые для доказательства запроса. В простейшем случае, когда запрос можно доказать по единственному факту, переменная «ПутьДоказательства» унифицируется со словами «есть_в_программе». Если запрос доказывается при помощи правила, то переменная «ПугьДоказательства» унифицируется с рекурсивной структурой "п", содержащей все подцели правила.
После конкретизации переменная «ПутьДоказательства» передается процедуре "спросить_у_пользователя". Эта процедура спрашивает пользователя, желает ли он просмотреть путь доказательства. В случае утвердительного ответа вызывается процедура "отобразить_путь", а в противном случае процедура "спросить_у_пользователя" терпит неудачу и процедура "вып()" возвращается назад для поиска другого ответа.

Реализация программы "вып"

% выполнить запрос.
вьп(Х) :-
вып() (Х,Р),
спросить_у_пользователя (X, Р).

спросить_у_пюльзователя (X, Р) :-
write (X), nl,
write (' введите символ h для просмотра пути доказательства '),
write (' или символ ; '),nl,
write (' для получения другого ответа.'),
nl,
get() (A),get0 (_), % ввод символа + перевод строки
А = 104, % ascii-код символа 'h'
отобразить_путь ('', Р), % "означает отсутствие отступа
!,
спросить_у_пользователя (X, Р).

% исходный случай: последняя фраза была фактом.
% + -
% Запрос Путь
вып()(true, есть_в_программе) :- !.
% составной запрос; вернуть Р1, соединенную с Р2 запятой
вып()(А, Б), (Р1, Р2)) :-
!,
вып()(А, Р1),
вып()(Б, Р2).

% простой запрос; вернуть структуру п( )
вып()(А,п (А,Р1)):-
clause (А, Тело),
вып() (Тело,Р1).

% отобразить путь выполнения:
% + +
отобразить_путь (Отступ, п (Фраза, есть_в_программе)) :-
write (Отступ), write (Фраза),
write ( содержится в программе.'), nl, !.

% первая подцель составного запроса
отобразить_путь (Отступ, п (Фраза, (Подцель, Подцели)) ) :-
сцепить (Отступ,' ', НовыйОтступ),
отобразить_путь (НовыйОтступ, Подцель),
!,
отобразить_путь (НовыйОтступ, Подцели).

% остальные подцели составного запроса
отобразить_путь (Отступ, (Подцель, Путь)) :-
отобразить_путь (Отступ, Подцель),
!,
отобразить_путь (Отступ, Путь).

отобразить_путь (Отступ, п (Фраза, Путь)) :-
write (Отступ), write (Фраза),
write (' ? '), nl,
сцепить (Отступ,' ', НовыйОтступ),
!,
отобразить_путь (НовыйОтступ, Путь).

% + + -
сцепить (X, Y, Z) :- % сцепить два атома
name (X, Хсписок),
name (У, Усписок),
присоединить (Хсписок, Усписок, Z список),
name (Z, Zсписок),!.




Доказательство факта. Лучше всего можно будет понять работу процедуры "вып", если рассмотреть входную и выходную информацию ее подцелей. Посмотрите, что получится, если на вход процедуры "вып()" поступит запрос, который является доказуемым по факту:

?- вып() (разновидность (собрание_38, X), ПутьДоказательства).




Процедура "вып()" вызовет подцель "clause", которая унифицирует переменную Х с константой «собрание_381», а переменную «Тело» - с «true», так как «разновидность (собрание_38, собрание_381)» — это факт.
Следующий вызов процедуры "вып()" будет эквивалентен такому
запросу:

?- вып() (true, P1).
Р1 = есть_-в_программе




Ответ на этот запрос получен по первому правилу "вып()". Значение переменной Р1 передается далее и становится частью структуры "п", которая '''возвращается через предыдущий вызов "вып()":

ПутьДоказательства = п (разновидность (собрание_38, собрание_381), есть_в_программе)

Доказательство правила. Предположим, что на вход процедуры "вып()" поступает запрос, который можно доказать только при помощи правила:

?- вып() (имеет_отношение_к (собрание_38, X), Путь). %(1)




Этот вызов согласуется с третьим правилом процедуры "вып()". Подцель "clause" этого правила эквивалентна запросу:

?- clause (имеет_отношение_к (собрание_38, X), Тело1). %(2)
Тело1 =" разновидность (собрание_38, X).




Подцель "вып()" данного правила эквивалентна:
?- вып() (разновидность (собрание_38, Х), Р1). %(3)
P1 =n(разновидность (собрание_38, собрание_381), есть_в_программе)




А этот запрос - точно такой же, как и проанализированный ранее. Теперь запрос (1) к процедуре "вып()"даст следующий результат:

Путь = п (имеет_отношение_к (собрание_38, собрание_381), п (разновидность (собрание_38, собрание_381),
есть_в_программе))




Показ цепочки выводов. Требование просмотреть путь доказательства вызовет серию обращений к процедуре "отобразить, путь", что эквивалентно следующим запросам:
?- отобразить_путь (' ' ,п (имеет_отношение_к (собрание_38. собрание_381),
п (разновидность (собрание_38, собрание_381), есть_в_программе))).




имеет_отношение_к (собрание_38, собрание_381) ?
?- отобразить_путь (‘ ‘, п (разновидность (собрание_38, собрание_381), есть_в_ программе)).



разновидность (собрание_38, собрание_381) содержится в программе.

Ограничения программы "вып". В приведенной версии программы "вып," не моделируется действие предиката "сократить". Если на вход программы "вып" подать запрос к процедуре, содержащий предикат "сократить", то этот предикат будет трактоваться как всегда истинная подцель. Предикат "сократить" не остановит процесс поиска с возвратом, выполняемый этой процедурой
Опубликовал Kest October 24 2010 20:09:00 · 0 Комментариев · 4747 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Animation (Пример...
PHP 5 в подлинник...
Trojan [Исходник ...
PHP: обучение на ...
INSTANT BOOSTER v...
Аватары в комме...
Доступа к БД Fire...
Java 2. Наиболее ...
БД студентов
PHP5. Профессиона...
Популярные загрузки
GamesBase 3.0
Генетический алго...
Разработка распре...
Упорядоченный дин...
RxLIB
Алгоритм DES шифр...
Win-Prolog 3.618
Размещение элемен...
CoolControls v3.0...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14239
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Как отключить авто...
Работа с изображением
Где найти хорошие ...
Сортировка списка ...
Недостатки нефирме...
Мы часто встречаем...
Применения неподви...
Разработать и реал...
Картридж Canon 703
• тип службы (_lda...
Установка чипа дл...
Где батут купить д...
Выполнение функций...
расчёт в операторах
Необязательные ...
Команда SELECT
Параметры шаблона ...
Вечерние платья
Undefined type la ...
Объекту DataAdapte...
Создание структуры...
INITIAL (ИНИЦИАЛИЗ...
Перестройка образо...
Установка встроенн...
Сообщение компилят...
Статистика



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


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