русс | укр

Языки программированияПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации


Пример программ на языке Турбо Пролог

Пусть заданы факты о книгах, их авторах и количестве страниц. Необходимо составить правило о том, какой роман можно считать большим, и реализовать это на Турбо-Прологе. Ниже приводится один из вариантов решения поставленной задачи.

Пример 1. Работа с фактами, правилами и переменными

domains
%        Описание доменов пользователя
заглавие, автор = symbol
страниц         = integer

predicates
%        Описание предикатов пользователя
книга(заглавие, страниц)
написал(автор, заглавие)
большой_роман(заглавие)

clauses
%         Факты
написал(горький, "МАТЬ").
написал(шолохов, "ТИХИЙ ДОН").
книга("ТИХИЙ ДОН",1250).
книга("МАТЬ", 310).
/*       Правило, определяющее,
какая книга считается большим романом      */

большой_роман(Заглавие) :-
написал(_, Заглавие),  %Автор в этом случае безразличен
книга(Заглавие, Страниц),
Страниц > 300.

     Эта реализация не содержит внутренних целей, так как предполагается, что пользователь работает в среде ТП и может задавать различные вопросы в режиме диалога. Например,

        Goal:написал(Кто,Что)

     При ответе на этот вопрос ТП производит УНИФИКАЦИЮ значений переменных Кто с обьектами "автор" и Что с обьектами "заглавие". B результате выдается ответ:

        Кто=горький Что="МАТЬ"
Кто=шолохов Что="ТИХИЙ ДОН"
2 Solutions

Или такой запрос:

        Goal:большой_роман(Заглавие)

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

        Заглавие="МАТЬ"
Заглавие="ТИХИЙ ДОН"
2 Solutions

В приведенном выше примере ТП выдает все альтернативные решения. Это не всегда нужно и в ТП предусмотрен специальный механизм - отсечение ненужных решений с помощью встроенного
предиката "!", а в качестве решения принимается ПЕРВЫЙ до от-
сечения истинный результат.
Пусть задана информация об автомобилях, их цене, модели и цвете. Необходимо купить яркий автомобиль по цене не выше 25000. Ниже приводится вариант решения этой задачи.

Пример 2 Покупка яркого автомобиля по цене < 25000

predicates
покупка_автомобиля(symbol, symbol)
автомобиль(symbol, symbol, integer)
цвета(symbol, symbol)

clauses
покупка_автомобиля(Model, Color) :-
автомобиль(Model, Color, Price),
цвета(Color, яркий),!, 
% рассматриваются только яркие автомобили
Price < 25000.

   автомобиль(москвич, зеленый, 25000).
автомобиль(запорожец, красный, 24000).
автомобиль(corvette, черный, 26000).
автомобиль(porsche, красный, 54000).
цвета(красный, яркий).
цвета(черный, неяркий).
цвета(зеленый, умеренный).

     В данной реализации приоритет имеют только яркие автомобили. Знак ! –отсечение, действует на предикаты
автомобиль(Model, Color, Price),  цвета(Color, яркий)
Поэтому в ответ на внешний запрос

        Goal:покупка_автомобиля(Модель,Цвет)

ТП выдаст решение:

        Модель=запорожец Цвет=красный
1 Solutions

     Но если факты по объектам "запорожец" и "porsche" поменять местами, то ответ ТП будет отрицательный, так как все остальные яркие автомобили НЕ РАССМАТРИВАЮТСЯ, а цена "porsche" более 25000. В этом и заключается суть отсечения и программист должен сам следить за корректностью описываемой на ТП задачи.

Просмотров: 19620

Вернуться воглавление


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские





Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.