русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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

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


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

Средства Prolog в программировании.


Дата добавления: 2013-12-23; просмотров: 1113; Нарушение авторских прав


1.Основными средствами управления процессом вычислений в Prolog являются стандартные предикаты fail (неуспех) и ! (отсечение). Назначение этих предикатов и методы их использования рассмотрим на примере программы

domains

st = student (fam, pr, ос)

fam, pr = symbol

num, oc = integer

g= gr (num, st)

predicates

Kurs_22 (g)

Если теперь после компиляции программы в качестве внешней цепи ввести запрос: Kurs 22 (х) находит х решений, то в диалоговом окне будет выведена информация:

(1) X = gr (261, student (Петров П.Р.,программирование,5)).

X = gr (261, student (Иванов Б.О.,"ОС", 5)).

Т.е. будут найдены все варианты решений, т.к. в запросе не задано ограничений на значение переменной х.

Если теперь любой из этих запросов сделать внутренним, т.е. записать в разделе goal, откомпилировать и выполнить программу, то кроме сообщения Press the SPACE bar, в диалоговом окне не будет результатов, т.к. мы не задали предикатов вывода значений результата внутреннего запроса.


Здесь для вывода значений переменной х после сопоставления используется системный предикат write(...). Результаты такого запроса будут помещены в диалоговое окно в виде (1). Т.е. будет найдено первое подходящее решение. если теперь не меняя запроса изменить порядок, предложенный в программе, например, поменять местами первое со вторым, то результат будет другим:

gr (261, student ("Иванов Б.О.,»ОС»,5)).

Prolog чувствителен к порядку предложений в программе. Правило просматривается сверху вниз. Для того, чтобы заставить prolog осуществить поиск всех вариантов решения задачи при использовании внутренней цели в программе (в данном варианте это вывод на экран всех фактов), необходимо организовать циклический перебор всех альтернативных решений. В Prolog это можно сделать различными способами.



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

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

Предписать Prolog выполнять откат можно не только с помощью предиката (fail). Любой неуспешно завершенный предикат вызывает откат до ближайшей альтернативы (стоящего от него левее в теле правила).


Т.о., сравнение Z= «Программирование», выполняет двоякую роль: с одной стороны, это фильтр, который не допускает выполнение предиката WR1TE(...), при неуспешном сравнении, а с другой стороны - вызывает из-за неуспешного сравнения откат до ближайшей альтернативы. При этом если бы не было предиката fail, то было бы получено только первое решение - tail обеспечивает перебор всех альтернатив. Предикат n! является стандартным, он выполняет переход на следующую строку при выводе информации на экран.

В Turbo Prolog имеются средства, с помощью которых можно заблокировать поиск с возвратом. Для этих целей служит специальный предикат, который называется отсечением (cut) и обозначается «!».

Другими словами, отсечение ограничивает распространение аргументов для подпора новых значений возврата (Бектрекинга) из-за неудачи. Отсечение применяется так же для ускорения вычислений путём отбрасывания избыточных ветвей вычислений.

Замечания:

1. Ранее были показаны отличия выполнения внутреннего (описанного в goal) и внешнего (вводимого через приглашение системы в диалоговом окне) запросов. Теперь мы можем сказать, что перебор всех альтернативных решений для внешнего запроса обеспечивается автоматическим присоединением к нему системой Turbo Prolog стандартного предиката fail.

2. Наличие в программе раздела goal позволяет после компиляции логической программы получить логический модуль программы и использовать его независимо от среды программирования Turbo Prolog.


 



<== предыдущая лекция | следующая лекция ==>
Основы программирования. | 


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


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

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

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


 


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

 
 

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

Генерация страницы за: 0.006 сек.