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

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

Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...
База данных студентов на Delphi (файл записей) + Блок схемы
Моделирование работы аэропорта на GPSS + Пояснительная записка

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


Развитие систем баз данных первоначально было мотивировано потребностью в эффективных средствах хранения, манипуляции и извлечения большого количества разнообразных данных. По мере того, как в достижении этих целей наблюдался прогресс, возникла дополнительная заинтересованность в возможности задавать информационным системам правила, применяемые к хранимым фактам (данным), с тем, чтобы появилась возможность вывода фактов, т.е. получения новых знаний.
Включение знаний в системы баз данных было подсказано исследованиями в области искусственного интеллекта (ИИ), который занимается вопросами программирования разумного поведения. Разработки в области ИИ включали исследования представлений логических правил, применяемых к данным. Экспертные системы (ЭС) — это особый раздел ИИ, посвященный представлению правил и процедур, которым следует специалист, решая задачи в конкретной предметной области. К таким областям относятся медицина, планирование налогов, проектирование компьютеров и т.д. Таким образом, экспертные системы (ЭС) можно определить как системы, моделирующие процесс принятия решений специалистами в разных предметных областях методами искусственного интеллекта [2] [3].
Хотя исследования в области экспертных систем значительно повлияли на методы представления знаний, основанные на логических правилах, экспертные системы не являются базами знаний, поскольку они не обеспечивают полные возможности управления данными, присущие системам управления базами данных (СУБД). Язык Пролог, наиболее популярный язык экспертных систем, является естественным мостом между базами данных и базами знаний. Этот язык основан на исчислении предикатов, а его предикаты могут рассматриваться как реляционные таблицы. Кроме того, в нем имеется возможность выражения той логики, которой пользуется человек, преобразуя факты из базы данных в информацию, помогающую принимать решения [4].
В средние века знание латинского и греческого языков являлось существенной частью образования любого ученого. Ученый, владеющий только одним языком, неизбежно чувствовал себя неполноценным, поскольку он был лишен той полноты восприятия, которая возникает благодаря возможности посмотреть на мир сразу с двух точек зрения. Таким же неполноценным ощущает себя сегодняшний исследователь в области искусственного интеллекта, если он не обладает основательным знакомством с Лиспом и Прологом - основными языками искусственного интеллекта. Без знания этих языков невозможен более широкий взгляд на предмет исследования.
В самом широком смысле, эволюция языков программирования - это движение от языков низкого уровня, при использовании которых, программист описывает то, как что-либо следует делать, к языкам высокого уровня, на которых просто указывается, что необходимо сделать. Так, например, появление Фортрана освободило программистов от необходимости разговаривать с машиной на языке адресов и регистров.
Однако Фортран, Си и большинство других языков программирования все еще остаются языками типа «как». Чемпионом среди этих языков является, пожалуй, современный модернизированный язык Лисп. Например, Common Lisp, имея богатейшие выразительные возможности, позволяет программисту описывать наиболее «выразительно» именно то, как что-либо следует делать. В то же время Пролог порывает с традициями языков типа «как», поскольку он определенным образом направляет программистское мышление, заставляя программиста давать определения ситуаций и формулировать задачи вместо того, чтобы во всех деталях описывать способ их решения. Программист только сообщает системе то, что ему известно, и задает вопросы. Его в большей степени интересуют знания и в меньшей - алгоритмы, при помощи которых из этих знаний извлекается нужная информация.
Пролог - это язык программирования, предназначенный для обработки символьной нечисловой информации [2]. Особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними.
Для иллюстрации особенностей представления знаний на языке Пролог (не вдаваясь в тонкости, которые будут рассмотрены далее в соответствующих разделах), рассмотрим на примере описания родословной Иисуса из Евангелия от Матфея. Как известно, эта родословная в Евангелии представлена в следующем виде.

1 Родословие Иисуса Христа, Сына Давидова, Сына Авраамова.
2 Авраам родил Исаака; Исаак родил Иакова; Иаков родил Иуду и братьев его;
3 Иуда родил Фареса и Зару от Фамари; Фарес родил Есрома; Есром родил Арама;
4 Арам родил Аминадава; Аминадав родил Наассона; Наассон родил Салмона;
5 Салмон родил Вооза от Рахавы; Вооз родил Овида от Руфи; Овид родил Иессея;
6 Иессей родил Давида царя; Давид царь родил Соломона от бывшей за Уриею;
7 Соломон родил Ровоама; Ровоам родил Авию; Авия родил Асу;
8 Аса родил Иосафата; Иосафат родил Иорама; Иорам родил Озию;
9 Озия родил Иоафама; Иоафам родил Ахаза; Ахаз родил Езекию;
10 Езекия родил Манассию; Манассия родил Амона; Амон родил Иосию;
11 Иосия родил Иоакима; Иоаким родил Иехонию и братьев его, перед переселением в Вавилон.
12 По переселении же в Вавилон, Иехония родил Салафииля; Салафииль родил Зоровавеля;
13 Зоровавель родил Авиуда; Авиуд родил Елиакима; Елиаким родил Азора;
14 Азор родил Садока; Садок родил Ахима; Ахим родил Елиуда;
15 Елиуд родил Елеазара; Елеазар родил Матфана; Матфан родил Иакова;
16 Иаков родил Иосифа, мужа Марии, от Которой родился Иисус, называемый Христос.
17 Итак всех родов от Авраама до Давида четырнадцать родов; и от Давида до переселения в Вавилон четырнадцать родов; и от переселения в Вавилон до Христа четырнадцать родов.





Суть задачи состоит в получении ответов на вопросы о типе родства тех или иных имен, содержащихся в приведенной родословной. Для получения ответов от системы, данную родословную необходимо представить в более формализованном виде. Тот факт, что Авраам является родителем Исаака, можно записать на Прологе так:

родитель( авраам, исаак).




Здесь мы выбрали родитель в качестве имени отношения, а авраам и исаак - в качестве его аргументов. По причинам, которые станут понятны позднее, мы записываем имена начиная со строчной буквы. В результате поддерево дерева родственных отношений может быть описано следующей пролог-программой:

родитель(авраам, исаак).
родитель(исаак, иаков).
родитель(иаков, иуда).
родитель(иуда, фарес).
родитель(иуда, зара)
родитель(фамарь, фарес).
родитель(фамарь, зара)
родитель(фарес, есром).
родитель(есром, арам).
родитель(арам, аминадав).
родитель(аминадав, наассон).
родитель(наассон, салмон).
родитель(салмон, вооз).
родитель(рахава, вооз).
родитель(вооз, овид).
родитель(руфь, овид).
родитель(овид, иессей).




Эта программа содержит 17 предложений. Каждое предложение объявляет об одном факте наличия отношения родитель.
После ввода такой программы в пролог-систему последней можно будет задавать вопросы, касающиеся отношения родитель. Например, является ли Овид родителем Иессея? Этот вопрос можно передать пролог-системе, набрав на клавиатуре терминала:
?- родитель(овид, иессей).



Найдя этот факт в программе, система ответит
yes (да)



Другим вопросом мог бы быть такой:
?- родитель(руфь, иессей).



Система ответит
nо (нет),



поскольку в программе ничего не говорится о том, является ли Руфь родителем Иессея. Программа ответит «нет» и на вопрос
?- родитель( соломон, вооз).



потому, что имя Соломон (в отличие от Салмон) в программе даже не упоминается.
Можно задавать и более интересные вопросы. Например: "Кто является родителем Аминадава?"
?- родитель( X, аминадав).



На этот раз система ответит не просто «да» или «нет». Она скажет нам, каким должно быть значение X (ранее неизвестное), чтобы вышеприведенное утверждение было истинным. Поэтому мы получим ответ:
X = арам



Вопрос «Кто дети Иуды?» можно передать пролог-системе в такой форме:
?- родитель( иуда, X).



В этом случае возможно несколько ответов. Сначала система сообщит первое решение:
X = фарес



Возможно, мы захотим увидеть и другие решения. О нашем желании мы можем сообщить системе (во многих реализациях для этого надо набрать точку с запятой), и она найдет другой ответ:
X = зара



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



Система будет по очереди находить все пары вида «родитель-ребенок». По мере того, как мы будем требовать от системы новых решений, они будут выводиться на экран одно за другим до тех пор, пока все они не будут найдены. Ответы выводятся следующим образом:

X = авраам
Y = исаак;

X = исаак
Y = иаков;

X = иаков
Y = иуда;
. . .



Опубликовал Kest September 23 2010 12:55:55 · 0 Комментариев · 12087 Прочтений · Для печати

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


Страница 1 из 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...
Шаблон для новост...

Случайные загрузки
Strawberry Prolog...
Просмотр коммент...
Run
INSTANT BOOSTER v...
Игра PackMan
Comdrv
Советы от Даниилы...
Защита от спама ...
Exe in exe
Архив программ
Шкрыль А. - Разра...
Java в примерах -...
PCX
Самоучитель PHP 5...
CwstatusBar
IpEditAdress
DCAVI
PHP 5
IIIDTrans
Работа с картотеками

Топ загрузок
Приложение Клие... 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
Случайные статьи
0 без пакетов испр...
Нерекурсивное пост...
Недвижимость в Чите
Массивы в среде Vi...
клиентских машинах...
Не оценивайте эксп...
Полный набор 16- и...
Шаблоны для Drupal...
Procedure or funct...
Алгоритм замены ст...
Неупорядоченные сп...
Вычислить значение...
Требования голосов...
Представление альт...
Цветовые обозначен...
Игроки
Шаблоны
Создание объекта D...
Раскрутка сайта с ...
3.1. Обработка спе...
на ваше решение
binary search: клю...
Тепловой фронт
Когда говорят про ...
Рационализация дом...
Статистика



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


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