
- •1.Введение в функциональное и логическое программирование
- •1.1. Основные классы вычислительных моделей
- •1.1.1 Процедурная вычислительная модель
- •1.1.2 Функциональная вычислительная модель
- •1.1.3. Логическая вычислительная модель
- •1.1.4. Объектно-ориентированная вычислительная модель (ооп)
- •1.2.Метод оценки (способ получения результатов)
- •1.3. Обмен информацией в процессе оценки
- •1.4.Понятие искусственного интеллекта
- •1.5.Символьные языки программирования
- •1.6. Основные направления в искусственном интеллекте
- •Для работы в сфере ии надо иметь:
- •1) Языки ии, обеспечивающие простоту модификации
- •3) Важна и структура самой машины, позволяющая с
- •2.Основы логического программирования и язык Пролог.
- •2.1.Основные понятия
- •2.2.Определение отношений на основе фактов и правил
- •2.3 Пример программы на языке Пролог
- •2.4.Использование рекурсии
- •2.5.Декларативная и процедурная трактовка программы
- •2.6. Cтруктура программы
- •2.7.Особенности лп:
- •2.8 Использование предиката not и
- •3.Синтаксис Пролога
- •3.1. Объекты данных
- •3.2. Составные объекты и альтернативные домены. В утверждениях объекты представляют собой данные.
- •3.2.1. Составная структура
- •Листинг3.1. Использование доменной структуры с именем personal_library
- •3.2.2.Доменная структурная диаграмма программы “Библиотека” (дсд)
- •3.2.3.Предикатная структурная диаграмма программы “Библиотека” (псд)
- •3.2.4. Альтернативные домены
- •Выводы:
- •Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на эвм?
- •3.3. Сопоставление структур(matching)
- •3.4.Унификация и подстановки (Unify).
- •3.5.Основные правила поиска с возвратом:
- •Листинг 3.4.Унификация и поиск с возвратом
- •4.Принцип резолюции
- •Метод резолюции в исчислении предикатов – это пра-
- •4.1.Логическое следствие
- •4.2. Логический вывод
- •4.3 Преимущества и недостатки метода резолюции
- •4.4. Пример применения метода резолюций.
- •5. Управление поиском решений
- •5.1.Метод отката после неудачи – опн
- •5.2 Метод отсечения и отката – оо
- •5.2.1.Влияние предиката cut на составную цель
- •5.2.3. Использование зеленых и красных отсечений
- •5.2.4.Использование предиката not как средства управления
- •5.3.Метод повтора, определяемый пользователем (мп)
- •5.4.Методы организации рекурсии
- •Листинг 5.9. Бесконечная рекурсия (хвостовая рекурсия)
- •Пример программы, которая циклически считывает символ, введенный пользователем. Если символ не равен #, то он выводится на экран, иначе процесс заканчивается.
- •Листинг 5.14. Пример рекурсии для генерации ряда чисел в порядке возрастания
- •Определение
- •Список помогает сделать программу компактной, эффектив-
- •Список – это рекурсивный составной объект, поэтому
- •6.1.Операции над структурами данных типа список.
- •6.2.Предикат findall
- •6.3. Операции со структурами данных.
1.1.3. Логическая вычислительная модель
В этих моделях вычисления представляются с помощью логики предикатов, а языки программирования, используемые для описания вычислений, называются логическими. Компьютер используется для получения выводов из декларативного описания предметной области. В качестве основы используется раздел математической логики, называемый автоматизация доказательства теорем. Для самого описания предметной области используются хорновские дизъюнкты как часть исчисления предикатов первого порядка. В логическом программировании основными являются понятия объектов и отношений между ними. Первая часть пособия посвящена именно логическому программированию и языку Пролог, поэтому сразу после введения перейдем к более подробному изложению этого стиля программирования.
1.1.4. Объектно-ориентированная вычислительная модель (ооп)
Основным элементом программы в этом стиле является объект, объединяющий в себе данные и операции над ними, называемые методами. Это отличает ООП от процедурного программирования, где операции отделены от данных.
Внутренняя структура данных и реализация методов объекта скрыта от остальной программы (инкапсуляция). Программе доступен только интерфейс объекта.
Основной механизм повторного использования программного обеспечения – это класс (по сути шаблон, описывающий все объекты, для которых характерны одинаковые операции и элементы данных).Разработка шаблонов позволяет создавать проекты сложных систем прямо “на лету”. Платить за это, правда, приходится выразительностью.
Для существующего класса можно создать подклассы путем использования наследования. Способность подклассов одного класса отвечать на одно и то же входящее сообщение по-разному называется полиморфизмом.
Такова краткая характеристика различных парадигм программирования.
Следовать какой-либо парадигме можно практически на любом языке программирования, но каждый язык программирования предназначен в первую очередь для работы внутри своей парадигмы.( Можно например, следовать функциональной парадигме программирования на языках С или С++, когда в теле каждой функции будет только одна инструкция – return.)
Необходимо решить, какой математический формализм должен быть положен в основу вычислительного процесса, который будет выполнять компьютер для решения задачи, то есть выбрать парадигму программирования.
1.2.Метод оценки (способ получения результатов)
Для каждой вычислительной модели существует свой метод оценки. Эти методы разделяются на 3 основных типа:
управление потоками команд; (процедурный)
управление потоками данных; (логический)
редукционные. (функциональный)
1.3. Обмен информацией в процессе оценки
В процессе оценки необходимо осуществить обмен информацией. Для этого используют различные способы:
вызов по значению;
вызов по ссылке;
вызов по имени;
вызов по запросу и т. д.
При программировании применяются различные вычислительные модели (стили), соответственно различные методы оценки и различные способы передачи информации.
Алгоритмы, используемые в этих стилях (моделях), реализуются с помощью языков программирования 4 типов – процедурного, функционального, логического и объектно-ориентированного.
Каждый язык программирования приспособлен к определенному типу вычислений, и использование того или иного языка вынуждает применять именно те типы вычислений, к которым данный язык программирования приспособлен. Это значит, что язык программирования навязывает определенный взгляд на мир и вынуждает мыслить в терминах того языка, на котором предполагается работать. Выбор стиля должен проходить оценку на соответствие стиля и цели программирования. Когда выбор языка сделан, то используются конструкции выбранного языка, а, следовательно, приходится мыслить в терминах семантики этих конструкций. Именно смысловая (семантическая) часть конструкций языка и определяет процесс мышления программиста. Конечно, факторы, которые влияют на выбор стиля, часто противоречивы. Например, эффективность программы с точки зрения архитектуры машины и ясность программы с точки зрения человека могут требовать различных способов изображения. Часто можно написать короткую программу, но понять ее будет очень трудно. Именно в таких ситуациях удачный выбор способа представления данных и метода решения позволяет найти приемлемый компромисс.
Способы мышления и программирования определяют модели (парадигмы) программирования, которые являются основой для создания конкретных языков программирования. Есть традиционные стили программирования, такие как процедурное и функциональное программирование. Есть сравнительно новые стили, такие как логическое и объектно-ориентированное программирование.
Вычислительные машины позволяют автоматизировать не только вычислительные задачи, но и задачи, которые принято относить к сфере искусственного интеллекта (ИИ).