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

Моделирование интернет кафе на GPSS + Отчет
Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы
Выбор наилучших альтернатив с использованием методов оптимизации на Delp...

Выдача информации о предшественниках


Предшественниками данной цели называются те цели, согласованность которых зависит от согласованности данной цели. На наших диаграммах с прямоугольниками это те цели, прямоугольники которых включают данную цель. Так, каждая цель имеет предшественника, который в свою очередь является одной из целей исходного вопроса – той целью, согласованию которой помогает текущая цель. Аналогично, когда речь идет о правиле, каждая цель, порожденная телом правила, имеет в качестве предшественника ту цель, которая сопоставлена с заголовком правила. Рассмотрим некоторые примеры предшественников. Обратимся к следующей простой программе обращения списка (которая рассматривалась в разд. 7.5):
обр([],[]).
oбp([H|T],L):- oбp(T,Z), присоединить(Z,[H],L).
присоединить([],X,Х).
присоединить([А|В],С,[А|D]):- присоединить(В,С,D).



Пусть мы задали исходный вопрос:
?- oбp([a,b,c,d],X). (A)



Тогда, вследствие второго утверждения, возникают две подцели, каждая из которых в качестве своего непосредственного предшественника имеет цель, составляющую содержание исходного вопроса. Вот эти подцели:
oбp([b,c,d],Z) (B)
присоединить(Z,[a],X) (C)



Поскольку второе утверждение будет снова использовано при согласовании (B), снова возникают две подцели:
oбp([c,d],Z1) (D)
присоединить(Z1,[a],Z) (E)



Их предшественниками являются цели (A) и (B). Заметим, что цель (C) не является их предшественником, поскольку от них непосредственно зависит только согласованность (B) , от которой, в свою очередь, зависит согласованность (А). Цели (D) и (E) никак не влияют на согласованность (C) . Когда процесс согласования исходного вопроса заходит уже достаточно далеко, возникает цель вида:
присоединить([с],[b],Y)



На этом этапе текущая цель и ее предшественники могут быть представлены в следующем виде:
oбp([a,b,c,d],_46) (цель A)
oбp([b,c,d],[d|_50]) (цель B)
присоединить([d,с],[b],[d|_51])
присоединить([с],[b],_52)



Прежде чем читать дальше, вам следует убедиться в том, что вы понимаете, почему это предшественники данной цели, а также почему у нее нет никаких других предшественников. С приведенным здесь изображением предшественников связана одна особенность, которая может проявиться и в вашей Пролог-системе. Существуют два способа выдачи информации о предшественнике на печать – при первом способе информация соответствует состоянию предшественника при первой попытке согласовать его, при втором – текущему состоянию, с теми значениями переменных, которые они получили в результате конкретизации. Здесь у нас принят второй способ. Когда выполнение впервые дошло до цели (B), второй аргумент предиката обр не был конкретизирован. Тем не менее, в списке предшественников этот аргумент показан как имеющий значение. Это объясняется тем, что теперь переменная, которая задана в этой позиции, оказалась конкретизированной, а именно, теперь мы выяснили, что для [b, с, d] первым элементом обращенного списка является d .
Глядя на предшественников текущей цели можно получить ясное представление о том, что происходит с программой и почему она делает то, что наблюдается. Одной из команд, которые пользователю разрешается вводить при наступлении управляемого события для некоторой цели может быть выдача сведений о каких-либо из ее предшественников. Таким образом, если вы чувствуете, что ваша программа тратит где-то много времени и подозреваете, что это может быть результатом зацикливания, то верная стратегия состоит в том, чтобы прервать выполнение, включить полную трассировку, а затем посмотреть на предшественников, чтобы понять, где вы находитесь.
Опубликовал Kest July 10 2009 08:01:57 · 0 Комментариев · 6021 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Разработка интерн...
PBEditPack
Пример клиента ФТ...
Исправление проц...
Atb
Delphi 2005 Учимс...
FormShape [Исходн...
Размещение элемен...
C# 2005 и платфор...
Цветной Grid
Delphi 2005 для .NET
AboutSystem
Игра "Астероиды" ...
Microsoft SQL Ser...
Дешифратор содерж...
EditNew
Советы по Delphi
Delphi на примерах
Autorunner
Dnavigator

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97833
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
ГЕНОЛОГ
Процедура SetAllPa...
Играйте в бесплатн...
Локализация имен в...
Базовые управляющи...
используют RRAS
Детская одежда
Canon 1210 картридж
Картридж Canon 703
Инструкция по сбор...
Игровые автоматы В...
Программирование а...
Как правильно иска...
Карта START
Бип из системного ...
10.1. Массив точек
Обзор букмекерской...
Управление перемещ...
Содержание
Слоты онлайн ПМ Ка...
Направление текста
Игровой дом Страда...
21 Д Безопасность ...
Программирование с...
Обобщения
Статистика



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


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