Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Компьютерная литература > Статьи по Prolog


Автор: hkdkest 4.11.2009, 11:29
Пролог - это язык программирования, предназначенный для представления и использования знаний о некоторой предметной области. Под предметной областью будем понимать множество рассматриваемых объектов и совокупность знаний о них. Любую взаимосвязь между объектами и (или) их свойствами назовем отношением. Так, например, для предметной области "Студенческая группа" характерными объектами будут студент, его фамилия, имя, отчество, номер группы, наименование факультета, номер специальности, курс обучения, изучаемые дисциплины, оценки, полученные на экзаменах, размер стипендии и т.д. Связи между конкретным студентом и номером группы, между его оценками и размером стипендии, между номером группы и факультетом, специальностью, курсом обучения будут являться отношениями. Таким образом, «Предметная область – это объекты и отношения».
Объекты могут быть объединены в классы, обладающие определенными свойствами. Элементы этих классов являются конкретными объектами предметной области. Для представления конкретного объекта в программе на Прологе используется константа. Константа – это число или символическое имя объекта. 
Имена конкретных объектов, отношений, свойств образуются по определенным правилам, зависящим от версии (реализации) языка Пролог, и называются символическими именами. Ниже рассмотрим правила, характерные для большинства версий Пролога.
• http://codingrus.ru/readarticle.php?article_id=1724

Все утверждения программы на Прологе делятся на факты, правила и вопросы. Факты отражают текущее состояние предметной области и содержат конкретную информацию. Факты всегда истинны и соответствуют простым безусловным высказываниям. Они описывают истинные в предметной области отношения (истинные предикаты). Рассмотрим пример описания меню в ресторане.
• http://codingrus.ru/readarticle.php?article_id=1725

Чтобы познакомиться с работой интерпретатора Пролога, введем в ЭВМ факты о блюдах в ресторане.
• http://codingrus.ru/readarticle.php?article_id=1726
• http://codingrus.ru/readarticle.php?article_id=1727
• http://codingrus.ru/readarticle.php?article_id=1728
• http://codingrus.ru/readarticle.php?article_id=1729
• http://codingrus.ru/readarticle.php?article_id=1730
• http://codingrus.ru/readarticle.php?article_id=1731
• http://codingrus.ru/readarticle.php?article_id=1732
• http://codingrus.ru/readarticle.php?article_id=1733
• http://codingrus.ru/readarticle.php?article_id=1734

Задание: описать предметную область "Расписание занятий" с помощью программы на языке Пролог.
• http://codingrus.ru/readarticle.php?article_id=1735

Автор: hkdkest 6.11.2009, 22:41
Продолжение:

Итерационные процессы. Процесс, состояние которого на текущем шаге зависит от состояния этого же процесса на предыдущих r шагах, называется многошаговым итерационным процессом и описывается следующими рекурентными соотношениями:
y0=a0, y1=a1,...,yr-1=ar-1; (1a) (начальные условия)
yk=f(yk,yk-1,yk-2,...,yk-r,X); (1б) (текущий момент) (1)
k=r, r+1, ..., ..., k=N, (1в) (условие окончания)
где f - произвольная функция, которая может быть задана аналитически, словесно, в виде алгоритма и т. д.;
yi - состояние процесса на i-м шаге;
X - параметры процесса.
• http://codingrus.ru/readarticle.php?article_id=1737

• http://codingrus.ru/readarticle.php?article_id=1738

• http://codingrus.ru/readarticle.php?article_id=1739

В математике рекурсия определяется как способ описания объектов, данных, процессов или функций через самих себя. Рекуррентные соотношения (1) представляют собой как раз такое описание. В них процесс на n-ом шаге определяется через тот же самый процесс на n-1-м шаге. Чтобы перейти к рекурсивному определению в программе, необходимо для описания процесса определить предикат, который обращался бы к самому себе (т.е. к описанию того же процесса) при других значениях аргументов (например, при другом номере шага K!=K-1). При этом как бы допускается, что уже имеется описание процесса, которое правильно выполняется для аргумента K-1 и, следовательно, позволяет получить состояние yk-i на предшествующем шаге. Например, рекуррентным соотношениям, описывающим процесс вычисления факториала F=N! (пример 1) и вычисления чисел Фибоначчи (пример 2), можно поставить в соответствие следующие программы на Прологе.
• http://codingrus.ru/readarticle.php?article_id=1740

• http://codingrus.ru/readarticle.php?article_id=1741

• http://codingrus.ru/readarticle.php?article_id=1742

• http://codingrus.ru/readarticle.php?article_id=1743

• http://codingrus.ru/readarticle.php?article_id=1744

• http://codingrus.ru/readarticle.php?article_id=1745

• http://codingrus.ru/readarticle.php?article_id=1746

• http://codingrus.ru/readarticle.php?article_id=1747

Список - это упорядоченная последовательность элементов, которая может иметь произвольную длину. Порядок расположения элементов в последовательности является существенным. Элементами списка могут быть любые термы - константы, переменные, списки, структуры, которые включают, конечно, и другие списки. Списки позволяют представить практически любой тип структуры данных, который может потребоваться при обработке символьной информации. Списки широко используются для представления деревьев и синтаксического разбора, грамматик, карт городов, программ для ЭВМ и математических объектов, таких как графы, формулы и функции.
• http://codingrus.ru/readarticle.php?article_id=1748

• http://codingrus.ru/readarticle.php?article_id=1749

• http://codingrus.ru/readarticle.php?article_id=1750

• http://codingrus.ru/readarticle.php?article_id=1751

• http://codingrus.ru/readarticle.php?article_id=1752

• http://codingrus.ru/readarticle.php?article_id=1753

• http://codingrus.ru/readarticle.php?article_id=1754

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)