
- •1. Языки программирования. Структурная технология программирования. Реализация основных алгоритмических структур на процедурном языке программирования.
- •2.Базовые алгоритмические структуры: процедуры и функции, рекурсивные функции и процедуры.
- •3.Составные структуры данных: определение новых типов данных, одномерные и двухмерные массивы, строки, множества, записи, файлы.
- •1. Массивы
- •3. Множества
- •4. Записи
- •5. Файлы
- •4. Динамические структуры данных: списки, стеки, очереди.
- •5. Понятие о логическом программировании. Структура программы в Прологе. Предикаты, правила, факты.
- •10) Информация, ее виды и свойства. Измерение информации.
- •11) Кодирование информации. Условие Фано. Коды Шеннона-Фано и Хаффмана.
- •12) Достоверность передачи информации. Коды Хемминга.
- •Кодирование с выявлением ошибок (коды с проверкой на четность).
- •3. Кодирование с исправлением ошибок (самокорректирующиеся коды).
- •13) Понятие о конечных автоматах. Эквивалентность и произведение конечных автоматов.
- •Алгоритмы и их свойства. Существование алгоритмически неразрешимых проблем. Машина Поста.
- •Формализация понятия алгоритма . Машина Тьюринга.
- •Формализация понятия алгоритма. Нормальные алгоритмы Маркова.
- •Формализация понятия алгоритма. Рекурсивные функции.
- •18. Формальная грамматика. Метаязыки. Форма Бэкуса-Наура. Синтаксические диаграммы.
- •Инструментальное программное обеспечение
- •Системы программирования
- •Виды инструментального по
- •Определение
5. Понятие о логическом программировании. Структура программы в Прологе. Предикаты, правила, факты.
Логическое программирование
Это семейство методов решения проблем, в которых используются приемы логического вывода для манипулирования знаниями, представленными в декларативной форме.
Логическое программирование связано с системами программирования, основанными на использовании специальных классов логических формул и специальных методов логического вывода.
Этот способ программирования и реализует Пролог.
Основные понятия логики.
Высказывание – предложение естественного языка, относительно которого можно сказать истинно оно или ложно.
Предикат - выражение с неопределенными терминами (переменными), при выборе конкретных значений для этих терминов преобразующееся в осмысленное (истинное или ложное) высказывание.
Например:
Если А, то В, иначе С.
Если Х – птица, то Х умеет летать.
Соотношения между высказываниями, способы поиска решений и выводов рассматривает алгебра логики, которая является основой языка Пролог.
Создание Пролога
Первая официальная версия Пролога – начало 70-х годов 20 века. Разработчик – Адам Кольмероэ, Марсельский университет, Франция.
Конец 80-х - 90-е годы 20 в. – широко распространен Turbo Prolog.
Конец 90-х по настоящее время используется Visual Prolog.
Принцип работы программ на Прологе.
Пролог – декларативный язык, т.е. для решения задачи он использует дедуктивные умозаключения, опираясь на заданные факты и правила.
В отличие от алгоритмических языков программисту нужно предоставить только описание задачи и основные правила ее решения.
Таким образом, система Пролога предназначена еще и для определения путей поиска решения.
Преимущества языка
1. Для определенных классов задач код программы существенно сокращается по сравнению с процедурными языками.
2. Легче избежать ошибок «зацикливания» фрагментов программ.
3. Т.к. программист вынужден писать
программу начиная с хорошо сконструированного описания задачи, то Пролог может использоваться еще и как средство создания спецификаций на продукт.
Программа на Прологе
Включает в себя:
Постановку задачи в виде множества логических формул
Описание цели, т.е. формулировку теоремы, которую нужно доказать, исходя из множества правил и фактов (множества логических формул).
Процесс поиска «доказательства» и составляет суть выполнения программы на Прологе.
Структура программы
Программа содержит 5 основных разделов
Domains – раздел описания данных для предикатных переменных (описание типов).
Predicates – раздел описания всех применяемых в программе предикатов.
Goal – раздел описания внутренней цели программы.
Clauses – раздел описания фактов и правил.
Goal – раздел описания внешней цели программы.
Раздел Domains
Синтаксис:
Имя нового домена = домен
По аналогии с алгоритмическими языками раздел можно рассматривать как описание новых типов данных.
В программе не является обязательным, но при решении крупных задач без него не обойтись.
Структуры (типы) данных
Существует 6 основных вложенных доменов (типов)
Char символьный тип
Integer целые числа
Real вещественные числа
String строки
Symbol имена
File файлы
Структуры данных называются термы.
Термы:
Простые
Атомы (символы, имена) Целые числа
Вещественные числа
Строки
Составные
Предикаты
Файлы
Списки
Примеры объявлений доменов
man, prof = symbol (имена man и prof определены как symbol)
Name = Ira; Olya; Anna; flowers; son(Name) (предикатная переменная name может
принимать одно их указанных значений)
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