ФИЛП. Программа содержит описание проблемы в терминах фактов и логических формул, а решение проблемы система выполняет с помощью механизмов логического вывода. Концепция логического программирования. Механизмы Пролога
Скачать 32.6 Kb.
|
Концепция логического программирования. Механизмы Пролога. Методология логического программирования - подход, согласно которому программа содержит описание проблемы в терминах фактов и логических формул, а решение проблемы система выполняет с помощью механизмов логического вывода. Концепция логического программирования. Механизмы Пролога. Концепция логического программирования Процедурные языки описывают процесс действий («как »что-лито делаем ),логическое программирование определяет («что» надо сделать),то есть в логическом программирование мы описываем известные нам факты и правила , а дальше задаем вопросы, все предикаты имеют два значения истина или лож. Механизмы Пролога. Автоматический перебора, можно собрать данные, удовлетворяющие некоторому свойству, из базы данных в список для последующей их обработки отсечение Механизмы Пролога. Сопоставление образцов(Унификация). Древовидное представление структур данных. Автоматический возврат (при поиске решения) Логика высказываний. Логика предикатов. Примеры и различия. Логика высказываний представляет собой выражение связное пропозициональными связями, которые дают в результате истину или ложь . Логика первого порядка — формальное исчисление, допускающее высказывания относительно переменных, фиксированных функций и предикатов. различия .Логика предикатов расширяет логику высказывание,она позволяет создать переменные Пролог. Объекты (термы) и утверждения (предикаты). Термы. Простые Сложные Утверждения (предикаты) Факт – безусловно истинное утверждение <предикат>(объет1, ... , объектN) или родитель(иван, ольга). Правило –условно истинное утверждение. [A]:-[B].,А – заголовок , В – тело правила состоит из фактов и правил. Вопрос – обращение к Пролог-программе определяющее достижимость цели Объекты Пролога: простые и сложные термы. Переменные и константы. Термы . Простые термы . Констнты. Атомы(со строчной буквы или в кавычках) . Char( отдельный символ в апострофах). Symbol. String. Числа. Integer. Real. Переменные (с прописной буквы или подчеркиванием) Сложные термы Структуры. Описание структуры T = S(X1,X2,... ,XN) Перечислимые термы. пример: sp = integer* Списки Общая структура программы на Прологе. Описание сложных термов. Общая структура программы на Прологе [inclide «файл, добавляемый к модулю»] [global domains] [Domains]<описание сложных термов> [global predicates] Predicates<описание предикатов> Clauses<набор правил и фактов> Goal <цель – задаваемый вопрос> Описание сложных термов. Перечислимые термы T=k1;k3;...;kN T – имя типа Ki –одно из возможных значений(атом,) Списки T=<тип элементов списка> Правила построения предикатов (факты, предложения, процедуры). факты Факт – безусловно истинное утверждение. <предикат>(объкт1,...,объктN) – родитель (иван,ольга) Предложение Предложение набор фактов заканчиваются точкой p (X):-q(X),s(X),r(X). Процедуры Процедуры – Набор правил с одним именем предиката, сгруппированных в одном месте . p(X):-q(X),s(X),r(X). p(X):-r(X). Унификация термов. Унификация (сопоставимы) Два терма унифицируемы(сопоставимы), если: Термы абсолютно одинаковы (константы); 1-й терм – переменная , 2-й – любой атом; У них одни и те же функтор(заголовок) и арность(количество аргументов) и все их аргументы сопоставимы (структуры). Если в предложение есть Y=2 проверяется Поиск решения. Понятие резольвенты. Завершение поиска. Поиск решения формируется резольвента; выбирается очередная цель из резольвенты; ищется предложение в программе, чей заголовок унифицируется с целью; цель заменяется на тело выбранного предложения; если тела нет (цель – факт), резольвента укорачивается; поиск продолжается с новой резольвентой, полученной из старой. Резольвента – множество целей, которые необходимо выполнить. Завершение поиска резольвента пуста – решение найдено; все предложения просмотрены – решение не найдено. Рекурсия и итерации. Отложенные вычисления. Рекурсия Формирование на подъеме Формирование на спуске итерации итерации отсутствуют отложные вычисления Отложенные вычисления Формируется при возврат на верх Отсечение. Правило применения. Примеры. Отсечение - Механизм, позволяющий отбросить ненужные решения. Правило применения Фиксируется предложение где есть предикат; После отсечение есть только возвраты Если до отсечение лож, то отсечение не отрабатывает Списки: представление списков, возможные операции над списками. представление списков Голова Тело возможные операции над списками Member (X, L) Member_n (X, Y, N) Append (X, Y, Z) Delete (X, Y, Z) Reverse (X,Y) Insert_N (X, N, Lold, Lnew) permutation (X, Y) del_double (X, Y) Работа со списками: предикаты APPEND, MEMBER. member(X,L) member(X,L). member(X,[X|_]) Member(X|[_|T]):-member(X,T). Append(X,Y,Z) Append([],Y,Y). Append([X|T],Y,[X|Z]):-append(T,Y,Z). Работа с базой фактов. Предикат FINDALL. FINDALL (X, Y, L) Встроенные предикаты: ввод/вывод, преобразование типов, работа со строками. ввод/вывод вывод write ввода readln readreal readint Работа с динамической базой фактов. Хранение фактов в файле. Работа с динамической базой фактов Объявление facts mysik(string,string,integer,integer) retract() удаление первого элемента retractall() удаление всех элементов assert() в конец БД assertz() в конец БД asserta()в начало БД Save() Технологии программирования: метод «образовать и проверить»,циклы и повторения метод «образовать и проверить» find (X) :- generate (X), test (X). generate (X) – генерация множества предполагаемых решений задачи test (X) – проверка предполагаемого решения циклы и повторения Графы: возможные способы представления. Список смежностей: G=[ [a, b, c], [b, d], [c, d, b], …] База предикатов смежностей: edge (a, [b, c]). edge (b, [d]). База предикатов ребер: edge (a, b). edge (a, c). edge (b, d). Бинарные деревья. К бинарным деревьям относится класс деревьев, где каждый предок имеет не более двух потомков. Каждый переход дерева – самостоятельное дерево, именно поэтому структура рекурсивна. Бинарное дерево либо пусто, либо состоит из левого поддерева, корня и правого поддерева. Корень может принимать любые значения. Левое и правое поддеревья являются бинарными деревьями. Прохождение бинарного дерева Прямой порядок Корень дерева Левое поддерево в прямом порядке Правое поддерево в прямом порядке Обратный порядок Левое поддерево в обратном порядке Правое поддерево в обратном порядке Корень Внутренный порядок Левое поддерево во внутреннем порядке Корень Правое поддерево во внутреннем порядке. Сортировки. Сортировка списка – переупорядочение эл-ов списка в такую последовательность,когда все элементы списка расположены в порядке не возрастания или не убывания Виды сортировки Быстрая сортировка Быстрая сортировка-исходнные списк разбивается на голову и хвост,хвост разбивается на 2 спискаЭ в первый список помещаются элементы меньшие, чем голова, во второй остальные;оба списка сортируются , затем упорядоченные списки сливаются вместе. Быстрая сортировка без предиката append Быстрая сортировка без предиката append, но с сромежуточный sort1(),кот-ый работает с промежуточным списком Q Простоя сортировка со вставками. Простоя сортировка со вставками.-Нупорядочные непустой список разбивается на голову и хвост, упорядочивается хвост,и далее голова вставляется в упорядоченный хвост так , чтобы получившийся список остался упорядоченным. Пузырьковая сортировка Пузырьковая сортировка-перестановка местами 2х эл-ов наход-ся в списке в неупорядоченом состоянии и повторение этого процесса до тех пор, пока перестановки станут ненужными Грамматики: виды грамматик, реализация грамматик на Прологе. Грамматики – это формальная система, определяющая язык. Пример: G = N – множество нетерминальных символов(вспомогательные символы при порождении языка) T - множество терминальных символов (алфавит языка) P – множество правил вывода вида a -> b (описывают процесс порождения цепочек языка) S – начальный или исходный символ S ∈ N Язык, определяемый грамматикой, – это множество цепочек, состоящих из терминальных символов и выводимых из одного выделенного начального символа Виды грамматик Регулярные грамматики Множество правил вывода имеет вид A-> xB, A-. Bx, A->x, где A,B ∈ N, x ∈ T Контекстно-свободные грамматики множество правил вывода имеет вид A-> B где A ∈ (N U T) Примечание: использовать право рекурсивные правила (Проверка с права на лева ) Алгоритм Prolog это и есть распознаватель грамматики Пример Множество цепочек из символов a, b, c, в цепочке обязательно присутствует ab. S -> M P -> a P -> cP S -> PM P -> b S -> MP P -> c S -> PMP P -> aP M -> ab P -> bP m ( [a, b] ). p ( [a] ). p ( [b] ). p ( [c] ). p ( [a | X] ) :- p (X). p ( [b | X] ) :- p (X). p ( [c | X] ) : -p (X). s (X) :- m (X). s (X) :- append (A, B, X), p (A), m (B). s (X) :- append (A, B, X), m (A), p (B). s (X) :- append (A, B, X), p(A), append (Q, W, B), m(Q), p(W). goal s ( [a, c, b, c, c, a, b, a, c, b, c] ). Пример 2 S -> Z Z -> 0 N -> 1 S -> N Z -> 00 N -> 11 Z -> 0N N -> 1Z Z -> 00N N -> 11Z z([0]). z([0,0]). z([0|X]):-n(X). z([0,0|X]):-n(X). n([1]). n([1,1]). n([1|X]):-z(X). n([1,1|X]):-z(X). t(X):-z(X). t(X):-n(X). goal t([1,0,0,1,0,1,1,1,0,1]). |