- •1. Введение в декларативные языки.
- •Прозрачность по ссылкам.
- •Логическое программирование
- •Правила
- •Примеры
- •Рекурсивные определения
- •Литература
- •Синтаксис пролога.
- •Структуры
- •Предикаты
- •Семантика пролога
- •Как происходит сопоставление
- •Алгоритм Эрбрана
- •Алгоритм вычисления целей(работы пролог машины).
- •Процедурный смысл правил
- •Использование списков и
- •Использование накапливающего параметра(прием)
- •Операторная запись
- •Управление перебором
- •Алгоритмы сортировки
- •1 Пузырьковая сортировка
- •Сортировка вставками
- •Быстрая сортировка.
- •Использование предикатов, анализирующих типы или структуру термов
- •Применение подстановки к структурированному терму
- •Недетерминированное программирование
- •Метод «породить и проверить»
- •Алгоритм сортировки
- •Программирование второго порядка
- •Рассмотрим, как работать с базой данный
- •Поиск в глубину
- •Темы кр
- •Использование формальных языков
- •Недетерминированный конечный автомат
- •Ввод и вывод
- •Рассмотрим ввод вывод алфавитно – цифровых символов
- •Функциональное программирование
- •Базовый язык
- •Рекурсивное определение функций
- •Функции высших порядков
- •Отображение списков
- •Декартово произведение множеств
- •Композиция функций.
- •Бесконечные списки
- •Рассмотрим как можно исп беск списки.
- •Метод породить и проверить
- •Сети связанных процессов
- •Определение ф чисел фибоначи
- •Задача хэмминга
- •Решето Эратосфена
- •Язык типов
- •Рассмотрим алгебраические типы данных.
- •Деревья – рекурсивные типы данных
- •Сделать дерево плоским
- •Удаление элемента дерева
- •Извлечение самого правого элемента
- •Функция форматирования числа
- •Законы функциональных программ
- •Наиболее важные законы функц программ доказываются по индукции
- •Закон map через foldr
- •Закон: композиция
- •Коммутативна
- •Дистрибутивность map относительно композиции:
- •Преобразование программ
- •Пример1
- •Стратегия для композиции
- •Приведение рекурсивной формы к итеративной форме
- •Введение в лямбда исчисление
- •Синтаксис лямбда исчисления
- •Множество связанных переменных
- •Множество свободных переменных
- •Подстановка
- •Конфликт имен(захват переменных)
- •Преобразование термов
- •Вторая теорема Черча – Россера “Теорема о стандартизации”
- •Комбинатор y
- •Вычислим fact 3
- •Вычислим fact 0
- •(Рассказ про y комбинатор – сразу зачёт)
Правила
Правила позволяют определять новое отношение, исходя из существующих.
Из суждения: если Х – родитель Y, то Y – ребенок Х.
Получается правило:
Ребенок (Y,X) .
Родитель (X,Y).
Все переменные связываются квантором всеобщнгости.мы его не пишем, но предполагаем.
На языке логики:
КВ.всеоб.(X,Y) . родитель (X,Y) -> ребеонк (Y,X)
Примеры
Введем новые факты:
Женщина (пам) .
Женщина (лиз) .
Женщина (пат) .
Женщина (памэнн ).
И свойство – женский пол.
Если мы введем эти факты, то можем построить новое отношение мать, которое опред.след.обр.:
Мать (X,Y) :-
Родитель (X,Y) ,
Женщина (X) .
Отношенеие сестра:
Сестра (X,Y) :-
Родитель (Z,X) ,
Родитель (Z, Y) ,
Женщина (Х) ,
Х \== Y.
Неравенство атомов \==
z
x
y
Если Z – родитель Х, и Z – родитель Y, и Х – женщина, и Х и Y не идентичны
Это Х – сестра Y.
Рекурсивные определения
На основе рекурсии строят самые интересные отношения
Потомок (X,Y) :- (1)
Родитель(Y,X) .
Потомок (X,Y) :- (2)
Родитель (Y,Z),
Потомок (X,Z) .
Потом удаленностью N определяем отношением удаленности N-1. Сводим к задаче, которая на 1 шаг меньше.
Отношения в прологе могут определяться несколькими правилами.
Для 1го правила мы дожлны найти такое отношение что Y родитель X, то можем заключиьь новое отнош. Что X явл. потомком Y
Литература
1 братко И. Программмирование на языке Пролог для ИссИнт.
! 2 Клоксин У., Меллиш К. Програ на яз.пролог
3 Стерлиг Л, шапиро Е. Исскуство прогр на яз Пролог (много примеров)
4 Хоггер К. Введение в логич программирование
Лекция 2
Изучим синтаксис и семантику
Синтаксис пролога.
Минимальными объектами с которыми предстоит иметь дело являются атомы.
В каждой области знаний разрабатывается своя терминология.
В прологе атомы используются для обозначения предметных констант.
В прологе есть 3 способа записи атомов :
1. ann x25 x_25 (последовательность букв, цифр и символом подчеркивания, начинающихся с маленькой буквы)
2. Как последовательность спец.симоволов +-*<>=:& _ ~
Пример : <--> ::= …
3. ‘Ann’ ‘Canada’
Переменные: X, Result, _25 (с большой буквы).
Здесь символ подчеркивания приравнивается к большой букве.
Есть одна особая переменная, анонимная, одно подчеркивание. Она используется если значение какой то позиции нам безразлично.
Пример: человек имеет ребенка.
Им.реб (Х) :- rod(X, _).
Анонимные переменные не образуют связей объектов.
Бабушка (Х,Y):-
Rod(x,y),
Rod(x,z),
Rod(z,y),
Fm(X).
Если вместо z поставить анонимную переменную то связи не будет между объектами.
Числа в прологе – это специального вида атомы.
15
В прологе можно использовать целые и вещественные числа.
Структуры
Они служат для обозначения сложных объектов и являются сложными, не атомарными именами.
Функциональный символ исп.для построения сложного имени.
Иванов Пальто(‘Иванов’)
Петров
Сидоров
Мы можем этих людей обозначить предметными константами и рассуждать.
А теперь будем рассуждать о одежде. У них есть пальто.
Это тоже обозначение предмета.
Пример: дата(1, май, 2006)
Функтор компоненты, аргументы
У структуры ее название – функтор, а компоненты – аргументы.
P1 = pnt(2,3)
P2 = pnt(3,5)
P3 = pnt(4,2)
L1 = line(P1, P2)
L2 = line (P3, P4)
Структура сама по себе обозначается функтором и количеством аргументов.
pnt/2 – функтор pnt с двумя аргументами.
Если мы возьмем pnt/3 это уже 3мерная точка.
Рассмотренные нами объекты, атомы, числа, переменные и структуры называются термами.