- •Вопрос 1) Сравнительная характеристика декларативных и процедурных языков программирования
- •Вопрос 2) Предикаты. Предложения: факты и правила. (Prolog)
- •Вопрос 3) Переменные. Анонимные переменные. Конкретизация переменных Prolog
- •Унификация составных объектов
- •Использование знака равенства для унификации составных объектов
- •Унификация.
- •Сравнение термов.
- •Вопрос 4) Сопоставление и унификация. Предикат равенства. (Prolog)
- •Вопрос 5) Основные секции программы Prolog
- •Вопрос 6) Основные стандартные домены (Prolog)
- •Вопрос 7) Основные принципы поиска с возвратом. (Prolog)
- •Вопрос 8) Управление поиском решений(Prolog)
- •Вопрос 9) Простые и составные объекты данных
- •Унификация составных объектов
- •Использование знака равенства для унификации составных объектов
- •Использование нескольких значений как единого целого
- •Пример использования составных объектов
- •Вопрос 10) Аргументы множественных доменов. (Prolog )
- •Аргументы множественных типов
- •Вопрос 11) Рекурсия (Prolog)
- •Cхема вычисления факториала с помощью нисходящей стратегии рекурсии
- •12. Списки: объявление и примеры работы. (Prolog)
- •13. Строки. Работа со строками. (Prolog)
- •Вопрос 14) Метод отката после неудачи Prolog
- •Вопрос 15) Основы языка lisp. Символьные выражения: атомы и списки. (Lisp)
- •Вопрос 16) Базовые функции и предикаты. (Lisp)
- •Вопрос 17) Функции, определение функций.
- •Вопрос 18) простая рекурсия. (Lisp)
Вопрос 1) Сравнительная характеристика декларативных и процедурных языков программирования
Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.
При функциональном (декларативном) программировании программистом не задается пошаговый алгоритм решения задачи ("как" решить задачу), а некоторым образом описывается, "что" требуется получить в качестве результата. Механизм обработки сопоставление по образцу декларативных утверждений уже реализован в устройстве языка.
Сравнительная характеристика декларативных и процедурных языков программирования.
Традиционно под программой понимают последовательность операторов (команд, выполняемых компьютером). Этот стиль программирования принято называть императивным (процедурным). Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу.
Время появления: 1950-е г.г.
Краткая характеристика:
программа – последовательность инструкций-операторов, включающих блоки типичных действий – процедуры или функции.
Примеры: Fortran, Pascal, C, Basic
Противоположный ему стиль программирования — так называемый декларативный стиль, в котором программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию. Программируя в декларативном стиле, программист должен описать, что нужно решать.
В основе декларативных языков лежит формализованная человеческая логика. Человек лишь описывает решаемую задачу, а поиском решения занимается императивная система программирования. В итоге получаем значительно большую скорость разработки приложений, значительно меньший размер исходного кода, легкость записи знаний на декларативных языках.
Время появления: 1960-е г.г.
Краткая характеристика: программа – описание действий, которые необходимо осуществить.
Программа представляет собой не набор команд, а описание действий, которые необходимо осуществить.
Фактически, программист оперирует не набором инструкций, а абстрактными понятиями,
которые могут быть достаточно обобщенными.
Примеры: LISP (Interlisp, Common Lisp, Scheme), Haskell, Prolog
Одним из путей развития декларативного стиля программирования стал функциональный
подход, возникший с появлением и развитием языка LISP.
Отличительной особенностью данного подхода является то, что любая программа, написанная на таком языке, может интерпретироваться как функция с одним или несколькими аргументами.
Текст программы представляет собой функцию, некоторые аргументы которой можно также рассматривать как функции. Таким образом, повторное использование кода сводится к вызову ранее описанной функции.
Более того, типы отдельных функций, используемых в функциональных языках, могут
быть переменными. Таким образом обеспечивается возможность обработки разнородных (полиморфизм).
Еще одним важным преимуществом реализации языков ФП является автоматизированное динамическое распределение памяти компьютера для хранения данных. «Сборки мусора» – очистки памяти от тех данных, которые больше не потребуются программе (обычно этот процесс периодически инициируется компьютером).
В 70-х г.г. возникла еще одна ветвь языков декларативного программирования, связанная
с проектами в области искусственного интеллекта, а именно, языки ЛП.
Согласно логическому подходу к программированию, программа представляет собой
совокупность правил или логических высказываний. Языки логического программирования базируются на классической логике и применимы для систем логического вывода, в частности, для так называемых экспертных систем.
(метод откатов)