Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответник на госы.docx
Скачиваний:
120
Добавлен:
08.02.2015
Размер:
1.89 Mб
Скачать

5.2. Логическое и функциональное программирование.(Принципы и сравнительная характеристика).

Декларативные (функциональные и логические) языки (зародились в 60-е годы)

Особенность

Программный код на декларативном языке программирования представляет собой описание действий, которые можно осуществлять, а не последовательный набор команд.

Преимущества

Легче формализуется математическими средствами.

Как следствие, программы проще тестировать, т.е. проверять на наличие ошибок.

Высокая степень абстракции.

Недостатки

Снижение скорости работы программы.

Применение

Доказательство теорем.

Возможность обработки разнородных данных.

a) Функциональные языки

Особенность

Программу на функциональном языке можно представить как функцию с одним или несколькими аргументами.

Преимущества

Автоматическое динамическое распределение памяти компьютера для хранения данных.

Программист получает возможность абстрагироваться от представления данных и других рутинных операциях и сосредоточиться на предметной области.

Недостатки

Нелинейная структура программы, следовательно, такое программирование сложно для понимания.

Относительно невысокая эффективность вычислений.

Применение

Обработка рекурсивных структур данных.

Обработка символьной информации.

Примеры языков: Haskell, LISP

b) Логические языки

Особенность

Программа представляет собой совокупность правил или логических высказываний.

В программе могут быть логические причинно-следственные связи.

Преимущества

Возможность откатов, т.е. возвращения к предыдущей подцели при отрицательном результате одного из вариантов в процессе поиска решения. Это избавляет от необходимости поиска решения путем полного перебора вариантов и увеличивает эффективность реализации.

Недостатки

Узкий класс решаемых задач.

Применение

Эмуляция искусственного интеллекта.

Разработка экспертных систем.

Примеры языков: Prolog.

Целью логического и функционального программирования является вывод решений и они тесно связаны с задачами, решаемыми в искусственном интеллекте и экспертных системах (ЭС). На начальном этапе развития систем искусственного интеллекта (СИИ) и ЭС даже выделился целый класс специализированных языков программирования: языки логического и функционального программирования.

Процедурная программа состоит из последовательности операторов и предложений, управляющих последовательностью их выполнения. В основе такого программирования лежат взятие значения какой-то переменной, совершение над ним действия и сохранение нового значения с помощью оператора присваивания, и так до тех пор пока не будет получено желаемое окончательное значение.

Функциональная программа состоит из совокупности определений функций. Функции, в свою очередь, представляют собой вызовы других функций и предложений, управляющих последовательностью вызовов. Каждый вызов возвращает некоторое значение и вызвавшую ее функцию, вычисление которой после этого продолжается. Этот процесс повторяется до тех пор, пока запустившая процесс функция не вернет результат пользователю.

В логических языках программирования для решения задачи достаточно описания структуры и условий этой задачи. Поскольку последовательность и способ выполнения программы не фиксируется, как при описании алгоритма, программы могут в принципе работать в обоих направлениях, то есть программа может как на основе исходных данных вычислить результаты, так и по результатам - исходные данные.

Наиболее известными языками функционального программирования являются ЛИСП и РЕФАЛ, а логического - Пролог. Однако, с развитием языков программирования (в частности, с появлением объектно-ориентированных языков) и баз данных область их применения сузилась. Так ЛИСП используется как оболочка Автокад, а РЕФАЛ как средство для построения метаязыков и метакомпиляторов.

Поэтому в дальнейшем внимание будет уделено не рассмотрению конкретных языков функционального и логического программирования, а подходам, лежащим в основе их реализации и являющимися базовыми при создании систем принятия решений.

ЛИСП и Пролог в свое время являлись базовыми для создания экспертных систем. Поэтому, для того чтобы наглядно представить какой круг задач решается с помощью логического и функционального программирования, рассмотрим задачи, возникающие в ЭС. Прежде всего, это задачи прямого и обратного вывода.