Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_IVT.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
11.58 Mб
Скачать

5. Понятие о логическом программировании. Структура программы в Прологе. Предикаты, правила, факты.

Логическое программирование

Это семейство методов решения проблем, в которых используются приемы логического вывода для манипулирования знаниями, представленными в декларативной форме.

Логическое программирование связано с системами программирования, основанными на использовании специальных классов логических формул и специальных методов логического вывода.

Этот способ программирования и реализует Пролог.

Основные понятия логики.

Высказывание – предложение естественного языка, относительно которого можно сказать истинно оно или ложно.

Предикат - выражение с неопределенными терминами (переменными), при выборе конкретных значений для этих терминов преобразующееся в осмысленное (истинное или ложное) высказывание.

Например:

  • Если А, то В, иначе С.

  • Если Х – птица, то Х умеет летать.

Соотношения между высказываниями, способы поиска решений и выводов рассматривает алгебра логики, которая является основой языка Пролог.

Создание Пролога

Первая официальная версия Пролога – начало 70-х годов 20 века. Разработчик – Адам Кольмероэ, Марсельский университет, Франция.

Конец 80-х - 90-е годы 20 в. – широко распространен Turbo Prolog.

Конец 90-х по настоящее время используется Visual Prolog.

Принцип работы программ на Прологе.

Пролог – декларативный язык, т.е. для решения задачи он использует дедуктивные умозаключения, опираясь на заданные факты и правила.

В отличие от алгоритмических языков программисту нужно предоставить только описание задачи и основные правила ее решения.

Таким образом, система Пролога предназначена еще и для определения путей поиска решения.

Преимущества языка

1. Для определенных классов задач код программы существенно сокращается по сравнению с процедурными языками.

2. Легче избежать ошибок «зацикливания» фрагментов программ.

3. Т.к. программист вынужден писать

программу начиная с хорошо сконструированного описания задачи, то Пролог может использоваться еще и как средство создания спецификаций на продукт.

Программа на Прологе

Включает в себя:

  1. Постановку задачи в виде множества логических формул

  2. Описание цели, т.е. формулировку теоремы, которую нужно доказать, исходя из множества правил и фактов (множества логических формул).

Процесс поиска «доказательства» и составляет суть выполнения программы на Прологе.

Структура программы

Программа содержит 5 основных разделов

  1. Domains – раздел описания данных для предикатных переменных (описание типов).

  2. Predicates – раздел описания всех применяемых в программе предикатов.

  3. Goal – раздел описания внутренней цели программы.

  4. Clauses – раздел описания фактов и правил.

  5. Goal – раздел описания внешней цели программы.

Раздел Domains

Синтаксис:

Имя нового домена = домен

По аналогии с алгоритмическими языками раздел можно рассматривать как описание новых типов данных.

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

Структуры (типы) данных

Существует 6 основных вложенных доменов (типов)

  1. Char символьный тип

  2. Integer целые числа

  3. Real вещественные числа

  4. String строки

  5. Symbol имена

  6. File файлы

Структуры данных называются термы.

Термы:

  1. Простые

    1. Атомы (символы, имена) Целые числа

    2. Вещественные числа

    3. Строки

  2. Составные

    1. Предикаты

    2. Файлы

    3. Списки

Примеры объявлений доменов

  1. man, prof = symbol (имена man и prof определены как symbol)

  2. Name = Ira; Olya; Anna; flowers; son(Name) (предикатная переменная name может

  3. принимать одно их указанных значений)

  4. Name = string (предикатная переменная name может принимать только строковые значения)

Sum = integer (предикатная переменная sum может принимать только целочисленные значения)

Раздел clauses

База знаний программы, в которой описываются факты и правила. Этот раздел по сути и является телом программы.

Факт – предикат, в котором аргументы являются константами. Факты всегда истинны.

Правило – это утверждение типа

А if B1, B2, … BN

А – предикат, Bi – предикаты или правила

Если истинны B1, B2, … BN, то истинно и А

Вместо if в Прологе используется :-

А :- B1, B2, … BN

Соответствия некоторых логических операций командам Пролога

If :-

Коньюнкция ,

Дизъюнкция ;

Пример базы знаний

Clauses

human(“Georg”).

humen(“Pit”).

child(“Anna”,”Georg”).

child(“Dima”,”Pit”).

human(X) :- child(X,Y), human(Y)

Раздел goal

Раздел определения цели программы, т.е. вопроса, который вы хотите задать программе (формулировка теоремы).

В зависимости от расположения ключевого слова goal, цели делятся на:

  • Внешние. Раздел располагается после раздела clauses и в этом случае ведется поиск всех вариантов ответа на вопрос.

  • Внутренние. Раздел располагается после раздела predicates и в этом случае ведется поиск одного варианта ответа на вопрос.

Примеры вопросов к программе

goal

  • humen (“Dima”) yes

  • humen (“Pit”) yes

humen (X) (X – переменная, имена переменных должны начинаться с большой буквы или знака подчеркивания)

X = Georg

X = Pit

X = Anna

X = Dima

4 Solution

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]