Содержание
- 2. Язык Пролог 1972, Ален Колмероэ Язык Пролог – в широко распространенная реализация принципов логического представления знаний.
- 3. Критика Пролога В Прологе реализуется лишь логическое представление знаний и лишь достоверный вывод, в то время
- 4. Особенности Пролога Для решения ряда задач Пролог оказывается гораздо более эффективным, чем, например, C++ или Java.
- 5. Синтаксис Преимущественно состоит из списка логических утверждений, которые можно разделить на факты и общие правила. Эти
- 6. Синтаксис Переменные обязательно начинаются с прописной буквы, поэтому все значения должны начинаться со строчной буквы. Кванторы
- 7. Логические операции в Прологе
- 8. Пример утверждений Список фактов, не содержащих переменных: man(serg). man(alex). father(serg, alex). mother(kat, serg). Эти факты говорят,
- 9. Общие правила Общие правила в Прологе записываются так же, как и факты, но в них присутствуют
- 10. Общие правила Поскольку в Прологе подобные выражения используются для получения значения p1(X) при некотором X, то
- 11. Общие правила Если дано правило p1(X,Y) :– p2(X) то оно означает вовсе не выражение а выражение
- 12. Примеры father(X, Y) :– man(X), parent(X, Y). Если некто X является мужчиной и родителем Y, то
- 13. Примеры grandfather(X, Y) :– father(X, Z), parent(Z, Y). X является дедушкой Y только тогда, когда X
- 14. Плохой пример mother(X, Y) :– woman(X). Если X является женщиной, то она мать любого Y.
- 15. Программа на языке Пролог Представляет собой список общих правил и фактов и не наделена функциональностью, а
- 16. Пример программы mother(X, Y) :– woman(X), parent(X, Y). father(X, Y) :– man(X), parent(X, Y). grandfather(X, Y)
- 17. Пример программы Посмотрим на следующие запросы, начинающиеся с приглашения "?–", на которые интерпретатор возвращает некоторый ответ:
- 18. Выводы Для обработки этих запросов интерпретатору необходимо выполнить логический вывод, а не просто обратиться к базе
- 19. Место для программы (аксиом) Место для ввода переменных (или других аргументов командной строки) Место для запроса
- 20. Запросы в виде выражений с переменными ?– mother(kat, X). X = victor Yes ?– grandfather(X, alex).
- 21. Запросы в виде выражений с переменными В подобного рода запросах предполагается квантор существования для входящих в
- 22. Запросы в виде выражений с переменными Более сложные выражения в запросах также допустимы, например, ?– mother(kat,
- 23. Команды для изменения базы Интерпретатор не только отвечает на запросы, но также позволяет интерактивно изменять базу
- 24. Арифметические выражения Сложение "+" Вычитание "-" Умножение "*" Деление "/" Остаток от целочисленного деления "mod"
- 25. Арифметические выражения Для того чтобы арифметическое выражение вычислялось, необходимо использовать оператор is. Пример: ?– X is
- 26. Арифметические выражения Арифметические выражения могут использоваться также и для описания связи переменных, входящих в предикаты. Пусть
- 27. Арифметические выражения Однако запрос вида f(5, Y, 35) является некорректным, поскольку интерпретатор требует, чтобы переменные, входящие
- 28. Пример вычисления факториала Поместим в базу следующие правила: fr(1,M) :- M is 1. fr(N,M) :- N>
- 29. Пример вычисления факториала Несложно убедиться, что этот предикат позволяет вычислять значение факториала: ?– fr(5, X). X
- 30. Задание Напишите список правил, позволяющих вычислять числа Фибоначчи.
- 31. Числа Фибоначчи (решение) fibonacci(0,M) :- M is 1. fibonacci(1,M) :- M is 1. fibonacci(N,M) :- N
- 32. Списки Помимо арифметических операций в Прологе также могут использоваться списки – упорядоченные множества элементов, которые являются
- 33. Списки Список в Прологе задается перечислением своих элементов через запятую внутри квадратных скобок: [] – пустой
- 34. Списки Поскольку в Прологе все основано на предикатах, то для объявления некоторого списка нужно ввести соответствующий
- 35. Списки: расщепление Основной операцией по работе со списками является их расщепление на голову (первый элемент списка)
- 36. Расщепление списков: примеры ?– family([serg|X]). X = [kat, victor, alex] Yes ?– family([nick, ann|X]). X =
- 37. Шаблоны списков [X|Y] – список, состоящий не менее чем из одного элемента [X, Y] – список,
- 38. Шаблоны списков На основе шаблонов можно создавать общие правила для списков. Предикат, проверяющий принадлежность элемента списку:
- 39. Списки: примеры запросов Пусть, к примеру, мы делаем запрос: ?– member(serg, [serg, kat, victor, alex]). Тогда
- 40. Списки: примеры запросов Сделаем запрос ?– member(serg, [kat, serg, victor, alex]). Интерпретатор не сможет выполнить унификацию
- 41. Списки: примеры запросов Мы можем воспользоваться введенными ранее фактами для предиката family и общими правилами для
- 42. Списки: встроенные предикаты length(L, N) является истинным, если N – длина (количество элементов) списка L. Примеры:
- 43. Списки: встроенные предикаты member(X, L) в действительности является встроенным предикатом; append(L1, L2, L3) истинен, когда L3
- 45. Скачать презентацию