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

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

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

Основные понятия принципов логического программирования

Мы можем остановить поток решений, набрав, например, точку вместо точки с запятой (выбор конкретного символа зависит от реализации).
Пролог-системе можно задавать и еще более сложные вопросы, скажем, кто является родителем родителя Иакова? Поскольку в нашей программе прямо не сказано, что представляет собой отношение родительродителя, такой вопрос следует задавать в два этапа.
Кто родитель Иакова?
Предположим, что это некоторый Y.
Кто родитель Y?
Предположим, что это некоторый X.
Такой составной вопрос на Прологе записывается в виде последовательности двух простых вопросов:
?- родитель( Y, иаков), родитель( X, Y).



Ответ будет:
X = авраам
Y = исаак




Наш составной вопрос можно интерпретировать и так: «Найти X и Y, удовлетворяющие следующим двум требованиям»:
родитель( Y, иаков) и родитель( X, Y)
Если мы поменяем порядок этих двух требований, то логический смысл останется прежним:
родитель( X, Y) и родитель( Y, иаков)
Этот вопрос можно задать нашей пролог-системе и в такой форме:
?- родитель( X, Y), родитель( Y, иаков).



При этом результат будет тем же. Таким же образом можно спросить: «Кто внуки Авраама?»
?- родитель(авраам, X), родитель( Х, Y).



Система ответит так:
X = авраам
Y = иаков




Следующим вопросом мог бы быть такой: «Есть ли у Фареса и Зары общий родитель?» Его тоже можно выразить в два этапа:
(1) Какой X является родителем Фареса?
(2) Является ли (тот же) X родителем Зары?
Соответствующий запрос к пролог-системе будет тогда выглядеть так:
?- родитель( X, фарес), родитель( X, зара).



Ответ:
X = иуда;
Х = фамарь




Теперь добавим к нашей программе о родственных связях еще одно отношение - предок. Определим его через отношение родитель. Ключевая идея здесь - определить отношение предок через него самого.
Для всех X и Z,
X - предок Z, если
существует Y, такой, что
(1) X - родитель Y и
(2) Y - предок Z.
Предложение Пролога, имеющее тот же смысл, записывается так:
предок( X, Z) :-
родитель( X, Y),
предок( Y, Z).
Теперь мы построили полную программу для отношения предок, содержащую два правила: одно для ближайших предков и другое для отдаленных предков. Здесь приводятся они оба вместе:
предок( X, Z) :-
родитель( X, Z).
предок( X, Z) :-
родитель( X, Y),
предок( Y, Z).




Ключевым моментом в данной формулировке было использование самого отношения предок в его определении. Такое определение может озадачить - допустимо ли при определении какого-либо понятия использовать его же, ведь оно определено еще не полностью. Такие определения называются рекурсивными. Логически они совершенно корректны и понятны. Но будет ли в состоянии пролог-система использовать рекурсивные правила? Оказывается, что пролог-система довольно легко может обрабатывать рекурсивные определения. На самом деле, рекурсия - один из фундаментальных приемов программирования на Прологе. Без рекурсии с его помощью невозможно решать задачи сколько-нибудь ощутимой сложности.
Возвращаясь к нашей программе, можно задать системе такой вопрос: «Кто потомки Авраама?» То есть: «Кто тот человек, чьим предком является Авраам?»
?- предок( авраам, X).
X = исаак;
X = иаков;
X = иуда;
X = фарес





Наша программа-пример помогла проиллюстрировать некоторые важные моменты, а именно:
На Прологе легко определить отношение, подобное отношению родитель, указав объекты, для которых это отношение выполняется.
Пользователь может легко задавать пролог-системе вопросы, касающиеся отношений, определенных в программе.
Пролог-программа состоит из предложений. Каждое предложение заканчивается точкой.
Аргументы отношения могут быть (среди прочего): конкретными объектами, или константами (такими, как авраам и иаков), или абстрактными объектами, такими, как X и Y. Объекты первого типа называются атомами. Объекты второго типа - переменными.
Вопросы к системе состоят из одного или более целевых утверждений (или кратко – целей). Последовательность целей, такая как
родитель( X, фарес), родитель( X, зара)
означает конъюнкцию этих целевых утверждений:
X - родитель Фареса и
X - родитель Зары.
Пролог-система рассматривает вопросы как цели, к достижению которых нужно стремиться.
Ответ на вопрос может оказаться или положительным или отрицательным в зависимости от того, может ли быть соответствующая цель достигнута или нет. В случае положительного ответа мы говорим, что соответствующая цель достижима и успешна. В противном случае цель недостижима, имеет неуспех или терпит неудачу.
Если на вопрос существует несколько ответов, пролог-система найдет столько из них, сколько пожелает пользователь.
Предложения могут быть заданы рекурсивно.
Опубликовал Kest September 23 2010 12:55:55 · 0 Комментариев · 12099 Прочтений · Для печати

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


Страница 2 из 2 < 1 2
Комментарии
Нет комментариев.
Добавить комментарий
Имя:



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

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

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

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

Пароль



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

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

Случайные загрузки
GamesBase 3.0
XPATComponents
Клавиатурный трен...
Xrumer 4 Platinum...
Библия хакера 2 К...
Pro-Download Sys...
XPmenu
Шейдеры в Delphi
BIOS
IPAddresseEdit
PolyFlow
Разработка интерн...
Книга по Delphi (...
Handles
DeleteEdit
SMExport
MiniTetris [Исход...
INSTANT BOOSTER v...
Socoban
DelTrayIcon [Исхо...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97842
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14194
Borland Delphi ... 10300
Turbo Pascal fo... 7375
Калькулятор [Ис... 5987
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
В четвертой главе ...
Игровые автоматы н...
Кодировка от алког...
Политикибезопаснос...
Как работают модули
Бюджеты и инфографика
Инициализация Тайм...
Структура
"Jj Issued certifi...
Игровые автоматы. ...
Взаимосвязь станда...
Разработка своими ...
Сигнатурой имени я...
Найти список изоли...
Игры в виртуальном...
ContentType
Блок конца изображ...
ВВЕДЕНИЕ В СТРУКТУРЫ
по любому протоколу
Игровые автоматы В...
Windows 2000
Этап 1 - исключени...
СПОСОБЫ РАСПОЗНАВА...
3. Запишите в табл...
Структура программы
Статистика



Друзья сайта
Программы, игры
Error: Incorrect password!
Error: Incorrect password!


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