
- •1.Введение в функциональное и логическое программирование
- •1.1. Основные классы вычислительных моделей
- •1.1.1 Процедурная вычислительная модель
- •1.1.2 Функциональная вычислительная модель
- •1.1.3. Логическая вычислительная модель
- •1.1.4. Объектно-ориентированная вычислительная модель (ооп)
- •1.2.Метод оценки (способ получения результатов)
- •1.3. Обмен информацией в процессе оценки
- •1.4.Понятие искусственного интеллекта
- •1.5.Символьные языки программирования
- •1.6. Основные направления в искусственном интеллекте
- •Для работы в сфере ии надо иметь:
- •1) Языки ии, обеспечивающие простоту модификации
- •3) Важна и структура самой машины, позволяющая с
- •2.Основы логического программирования и язык Пролог.
- •2.1.Основные понятия
- •2.2.Определение отношений на основе фактов и правил
- •2.3 Пример программы на языке Пролог
- •2.4.Использование рекурсии
- •2.5.Декларативная и процедурная трактовка программы
- •2.6. Cтруктура программы
- •2.7.Особенности лп:
- •2.8 Использование предиката not и
- •3.Синтаксис Пролога
- •3.1. Объекты данных
- •3.2. Составные объекты и альтернативные домены. В утверждениях объекты представляют собой данные.
- •3.2.1. Составная структура
- •Листинг3.1. Использование доменной структуры с именем personal_library
- •3.2.2.Доменная структурная диаграмма программы “Библиотека” (дсд)
- •3.2.3.Предикатная структурная диаграмма программы “Библиотека” (псд)
- •3.2.4. Альтернативные домены
- •Выводы:
- •Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на эвм?
- •3.3. Сопоставление структур(matching)
- •3.4.Унификация и подстановки (Unify).
- •3.5.Основные правила поиска с возвратом:
- •Листинг 3.4.Унификация и поиск с возвратом
- •4.Принцип резолюции
- •Метод резолюции в исчислении предикатов – это пра-
- •4.1.Логическое следствие
- •4.2. Логический вывод
- •4.3 Преимущества и недостатки метода резолюции
- •4.4. Пример применения метода резолюций.
- •5. Управление поиском решений
- •5.1.Метод отката после неудачи – опн
- •5.2 Метод отсечения и отката – оо
- •5.2.1.Влияние предиката cut на составную цель
- •5.2.3. Использование зеленых и красных отсечений
- •5.2.4.Использование предиката not как средства управления
- •5.3.Метод повтора, определяемый пользователем (мп)
- •5.4.Методы организации рекурсии
- •Листинг 5.9. Бесконечная рекурсия (хвостовая рекурсия)
- •Пример программы, которая циклически считывает символ, введенный пользователем. Если символ не равен #, то он выводится на экран, иначе процесс заканчивается.
- •Листинг 5.14. Пример рекурсии для генерации ряда чисел в порядке возрастания
- •Определение
- •Список помогает сделать программу компактной, эффектив-
- •Список – это рекурсивный составной объект, поэтому
- •6.1.Операции над структурами данных типа список.
- •6.2.Предикат findall
- •6.3. Операции со структурами данных.
3.2.4. Альтернативные домены
Представление данных часто требует наличия большого числа структур, эти структуры должны быть описаны. Поэтому предлагается альтернативное описание доменов. Для разделения доменов используют знак “;”.
Листинг 3.2. Использование альтернативных доменов
domains
row,column,step=integer
movement=up(step);
down(step);
left(step);
right(step)
predicates
move_cursor(row,column,movement)
clauses
move_cursor(R,C,up(Step)):-
cursor(R,C),
R1=R-Step,
cursor(R1,C),
write("movement_up\n").
move_cursor(R,C,down(Step)):-
cursor(R,C),
R1=R+Step,
cursor(R1,C),
write("movement_down\n").
move_cursor(R,C,left(Step)):-
cursor(R,C),
C1=C-Step,
cursor(R,C1),
write("movement_feft\n").
move_cursor(R,C,right(Step)):-
cursor(R,C),
C1=C+Step,
cursor(R,C1),
write("movement_right\n").
Альтернативный домен позволяет использовать предикат movevent применительно к различным классам движения курсора. Термы up, down, left, right являются именами структур. Однако,при появлении в предикатном выражении одновременно играют роль имен функторов, то есть Пролог не делает различий между функторами структур и доменными структурами. Если бы конструкция домена movement отсутствовала, то пришлось бы ввести 4 предиката.
Здесь использован стандартный предикат
cursor(Row,Column) (integer,integer) (вх, вх) ,(вых, вых):
- помещает курсор в позицию с координатами (Row,Column) (вх, вх);
- присваивает переменной Row и Column значения текущих координат курсора(вых, вых).
Выводы:
- Типы объектов данных могут быть простыми и составными. Простой объект – это константа или переменная.
- Составной объект данных позволяет рассматривать несколько частей информации как единое целое. В этом случае функтор используется для различения объектов. Функтор – это имя, а не функция. Функтор определяет вид составных объектов данных и объединяет вместе их аргументы.
- Домен можно определить как несколько альтернативных функторов (альтернативный домен).
- использование составных объектов позволяет упростить написание предикатов.
-использование альтернативных доменов позволяет сократить количество используемых предикатов.
Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на эвм?
Начнем с рассмотрения алгоритма унификации, который составляет основу вычислительной модели логических программ (реализует механизм упрощения).
3.3. Сопоставление структур(matching)
Можно рассматривать каждое утверждение программы как структуру того или иного вида:
parent(bob,tom) – это структура, и тогда
parent- функтор структуры; bob, tom-компоненты структуры.
Компоненты структуры заключаются в круглые скобки;
разделяются между собой запятыми;
между функтором и левой скобкой нет пробела;
количество компонент структуры определяет ее размерность(арность –arity)
Факты, правила, заголовки правил, цели – все они по синтаксису языка являются просто структурами:
ФАКТ- структура для утверждения;
ЦЕЛЬ – структура для вопроса.
ДВЕ СТРУКТУРЫ СОПОСТАВИМЫ, ЕСЛИ
они имеют один и тот же главный функтор;
одинаковую размерность;
компоненты на одинаковых позициях обеих структур сопоставимы
ДВЕ КОМПОНЕНТЫ СОПОСТАВИМЫ, ЕСЛИ:
обе являются константами и представляют собой одинаковый объект;
одна из них переменная;
обе являются структурами, и эти структуры сопоставимы.
СОПОСТАВЛЕНИЕ- это процесс, на вход которого подаются два терма, и идет проверка соответствия этих термов друг другу. Если термы не сопоставимы, то процесс заканчивается неудачей. Если термы сопоставимы, то процесс заканчивается успешно и в обоих термах происходит конкретизация переменных такими значениями, что оба терма становятся тождественными. Например,
dата(D, C, 2012)
| | |
data(D1, october, Y1)
Одна из конкретизаций, которая делает эти термы идентичными:
D=D1 C=october Y1=2012
Нашли конкретизацию переменных, делающих эти
термы тождественными, и процесс завершился успешно.