- •1. Введение в декларативные языки.
- •Прозрачность по ссылкам.
- •Логическое программирование
- •Правила
- •Примеры
- •Рекурсивные определения
- •Литература
- •Синтаксис пролога.
- •Структуры
- •Предикаты
- •Семантика пролога
- •Как происходит сопоставление
- •Алгоритм Эрбрана
- •Алгоритм вычисления целей(работы пролог машины).
- •Процедурный смысл правил
- •Использование списков и
- •Использование накапливающего параметра(прием)
- •Операторная запись
- •Управление перебором
- •Алгоритмы сортировки
- •1 Пузырьковая сортировка
- •Сортировка вставками
- •Быстрая сортировка.
- •Использование предикатов, анализирующих типы или структуру термов
- •Применение подстановки к структурированному терму
- •Недетерминированное программирование
- •Метод «породить и проверить»
- •Алгоритм сортировки
- •Программирование второго порядка
- •Рассмотрим, как работать с базой данный
- •Поиск в глубину
- •Темы кр
- •Использование формальных языков
- •Недетерминированный конечный автомат
- •Ввод и вывод
- •Рассмотрим ввод вывод алфавитно – цифровых символов
- •Функциональное программирование
- •Базовый язык
- •Рекурсивное определение функций
- •Функции высших порядков
- •Отображение списков
- •Декартово произведение множеств
- •Композиция функций.
- •Бесконечные списки
- •Рассмотрим как можно исп беск списки.
- •Метод породить и проверить
- •Сети связанных процессов
- •Определение ф чисел фибоначи
- •Задача хэмминга
- •Решето Эратосфена
- •Язык типов
- •Рассмотрим алгебраические типы данных.
- •Деревья – рекурсивные типы данных
- •Сделать дерево плоским
- •Удаление элемента дерева
- •Извлечение самого правого элемента
- •Функция форматирования числа
- •Законы функциональных программ
- •Наиболее важные законы функц программ доказываются по индукции
- •Закон map через foldr
- •Закон: композиция
- •Коммутативна
- •Дистрибутивность map относительно композиции:
- •Преобразование программ
- •Пример1
- •Стратегия для композиции
- •Приведение рекурсивной формы к итеративной форме
- •Введение в лямбда исчисление
- •Синтаксис лямбда исчисления
- •Множество связанных переменных
- •Множество свободных переменных
- •Подстановка
- •Конфликт имен(захват переменных)
- •Преобразование термов
- •Вторая теорема Черча – Россера “Теорема о стандартизации”
- •Комбинатор y
- •Вычислим fact 3
- •Вычислим fact 0
- •(Рассказ про y комбинатор – сразу зачёт)
Программирование второго порядка
Здесь мы рассм некоторые возможности пролога которые выходят за рамки логич модели.
Термин прог 2го порядка означает, что мы будем рассм предикаты которые опирируются множествами.
В прологе есть встроенные предикаты, собир в список все решения какой либо цели.
Bagof /3. – множество в котором могут быть дубликаты. Этот предикат строит список элементов Bag, в него входят все объекты Term, удовл цели Goal.
Bagof(Term,Goal,Bag).
Список детей некоторого Х.
Дети(Х,Дети):-
Bagof(Д,родитель(Х,Д),Дети).
Результат каждого запуска
Запускается и в случае успеха выполняется
Список результатов
Если мы не хотим чтобы в список решений (???целей ???) заносились дубликаты мы должны исп setof/3, он раб также как bagof, только исключает дубликаты.
Set – множество.
?- дети(tom,X).
X = [bob,liz].
Setof(Term,Goal,Bag).
Рассмотрим, как работать с базой данный
Все факты и правила программы принято называть БД. Мы можем БД менять в процессе работы программы. Т.е. мы можем дополнять программу, можем удалять что то из программы.
Если взять процедуру выше, bagof, она может быть реализована с исп операций занесения в БД, мы можем каждый ответ заносить в виде факта, когда факты кончатся, то перейти к их соединению. Получим процедуру bagof.
Есть след предикаты:
Вставка новых предложений: цель assert(С) – всегда успешна, и имеет побочный эффект - заносит предложение С в базу данных.
asserta/1 – заносит в начало,
assertz/1 – заносит в конец.
Пример. ?- assert( (мать(X,Y) :- родитель(X,Y), женщина(X) )).
Если в БД заносится правило то его нужно закл в круглые скобки!
***По курсовой работе!***
Разделы курсовой работы.
1 пункт – Введение
В введении нужно рассказать о важности филп. Что то сказать о декларативных методах, на сколько они важны. Важно чтобы программа была написана с методами, исп прологом. Не надо искать цикл, не надо заводить переменные.
2 пункт – постановка задачи
Нужно изложить все те сведения, которые необходимы для формулировки задачи и дать саму формулировку задачи.
Пример. Тема нахождение эйлерового цикла. Она касается графа. Нужно про граф, про путь, узлы графа, дуги графа… Чтобы была целостная …
3 пункт – выбор структуры данных
Подумать какие будут объекты, состояния.
Можно к примеру не исп а сказать что списки используются и всё.
Нужно объяснить что есть что. Список ребер, вершин, решений…
4 пункт – формулировка алгоритма
Здесь нужно все случаи, базовые, общие для рекурсивных процедур описать.
5 – примеры работы программы
Если тема – нах эй цикла, то нужно взять несколько графов, для них найти..показать…
Здесь не нужны экранные формы. Исходные данные – результаты, объяснить, как получилось.
6 – заключение
Кратко написать какие получили результаты. Результаты всей работы.
7 – список литературы
8 – приложение
Это текст программы.