Логическое программирование

Автор: Пользователь скрыл имя, 13 Мая 2012 в 06:13, курсовая работа

Краткое описание

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

Оглавление

Введение. 3
Глава 1. Общие сведения. 6
1.1 Чистый Пролог. 6
1.2. Сравнение с традиционными языками 7
программирования 7
Глава 2. Программирование на чистом Прологе. 8
2.1 Порядок правил. 8
2.2. Проблема завершения программ. 9
2.3. Порядок целей. 9
2.4. Избыточные решения. 10
Глава 3. Практические рекомендации. 10
3.1 Эффективность программ на Прологе. 11
3.2. Разработка программ. 12
Глава 4. Другие языки логического программирования. 14
4.1 Язык логического программирования KL0. 14
4.2 Типы данных KL0. 14
4.3. Язык программирования ShapeUp. 15
Заключение. 16
Список Литературы 17

Файлы: 1 файл

Логическое программирование.doc

— 141.50 Кб (Скачать)

  Один из  ответов на вопрос в чём  разница в разработке программ  на Прологе и на обычных  языках программирования состоит  в том, что, хотя, программирование на Прологе – это "просто” программирование, в случае Пролога имеется преимущество в простоте записи и скорости отладки по сравнению с формализмами более низкого уровня.

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

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

  Имеющиеся  средства и системы программирования  не навязывают и не поддерживают  какую либо специфическую методику  разработки программ. Однако, как  и в других символьных языках  программирования, наиболее естественной  стратегией разработки программ  является стратегия быстрой смены прототипов. При такой стратегии на каждой стадии разработки имеется лучше работающий прототип программы. Разработка происходит путём переделки или расширения прототипа. Другой подход к разработке программ, иногда комбинируемый с первым, состоит в "нисходящем анализе и восходящей реализации”. Хотя проектирование системы следует проводить нисходящим способом, основываясь на  анализе цели, реализацию системы лучше всего строить "снизу вверх”. В процессе восходящего программирования каждый написанный фрагмент программы может быть немедленно отлажен. Глобальные проектные решения, такие, как представление, могут быть проверены на небольших сегментах системы, которые будут приведены  в порядок и очищены от ошибок на начальной стадии программирования. Кроме того, эксперименты с одной подсистемой могут привести к изменению проектных решений, относящихся к другим подсистемам.

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

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

Глава 4. Другие языки логического программирования.

 

  Пролог не  единственный язык логического программирования. Кроме него существует ряд других языков, не получивших такого широкого признания в кругах программистов. Рассмотрим два таких языка.

4.1 Язык логического программирования KL0.

 

  KL0 (от англ. "kernel-language version 0” – ядро-язык  версии 0) – язык, в основу которого положено расширение языка логического программирования Пролог. Среди особенностей, новых в KL0 по отношению к Прологу, можно выделить:

более гибкую структуру  управления.

многопроцессовость

операции с  побочным эффектом

машинно-ориентированные операции.

  К наиболее  существенным механизмам Пролога,  не поддерживаемым в KL0, относятся:

средства управления базой данных

средства управления таблицей имён.

Так как KL0 мало чем отличается от Пролога, ограничимся  лишь рассмотрением типов данных.

4.2 Типы данных KL0.

 

  Рассмотрим  в общих чертах некоторые базовые  типы данных языка. К ним  относятся символы, целые и  действительные числа, строки  и др.

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

  Целые и  действительные числа введены  для эффективного выполнения  арифметических операций. Арифметические  операции в KL0 не обладают свойством  двойственности: сложение и вычитание  здесь различные предикаты. Аппаратно  поддерживаются только числа фиксированной длины, определяемой разрядной сеткой. Целые числа произвольной длины (bignums), действительные числа произвольной точности и, возможно, рациональные числа могут быть реализованы с помощью обработчика исключений. Исключение возбуждается, если операндами встроенных арифметических предикатов (машинных инструкций в традиционном смысле) являются, например, нечисловые данные. Обработчик исключения может проверить аргументы и, если они соответствуют ожидаемым, выполнить предписанные операции; в противном случае вызывается обработчик ошибок. После обработки исключения дальнейшее выполнение программы может быть возобновлено.

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

4.3. Язык программирования ShapeUp.

 

  ShapeUp - ещё  один язык логического программирования, в основу которого положен  Пролог, расширенный средствами  сопоставления строк.

  В ShapeUp образцы  строк рассматриваются так же, как и термы Пролога, и их сопоставление возложено на процесс унификацию. Таким образом, программы на ShapeUp значительно проще, чем аналогичные программы на Прологе, их легче писать и понимать. Сокращается значительно и размер программ.

  Прологу присущи недетерминированность и сопоставление с образцом. Эти свойства очень полезны для разработки систем обработки информационных знаний. К таким система можно отнести системы понимания естественного языка и другие системы интеллектуальной обработки текстов. Для подобных приложений очень важна операция сопоставления строк. Однако механизм сопоставления с образцом в таком виде, как он существует в Прологе, недостаточен для сопоставления строк. Причина заключена в "терм-терм” механизме сопоставления. ShapeUp – попытка разработать более практический, свободный от присущего Прологу недостатка инструмент программирования. Характерной чертой ShapeUp, отличающей его от традиционных Пролог-систем, является выполняемая при унификации функция сопоставления строк. В ShapeUp включено несколько операторов сопоставления строк. Язык позволяет конструировать образцы строк, представляемые как термы Пролога. Образцы могут унифицироваться с различными строковыми объектами: расширена унификация для выполнения сопоставления строк. В результате ShapeUp-программы проще и имеют более прозрачную семантику, их легче писать.

Список языков логического программирования можно  продолжать ещё долго. Кроме перечисленных  выше, к языкам логического программирования относятся также: Дейталог, LogLisp и множество других.

                                             Заключение.

 

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

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

Список  Литературы 

  1. Функциональное  и логическое программирование, Сергиевский Г. Е., Волченков Н. А. ,Academia,  2010
  2. Логическое программирование, Ездаков А. Л., БИНОМ. Лаборатория знаний,2009
  3. Системы искусственного интеллекта, Сидоркина И. Г., Кнорус, 2010.
  4. Математическая логика и теория алгоритмов, Игошин В. А., Академия, 2008.
  5. Логическое программирование на языке Visual Prolog, Н. И. Цуканова, Т. А. Дмитриева, Горячая Линия – Телеком, 2007.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Бурятский государственный  университет

    Институт  математики и информатики

Кафедра информационных технологий 
 

ДНЕВНИК

ПРОХОЖДЕНИЯ ПРОИЗВОДСТВЕННОЙ ПРАКТИКИ 

Студента                               курса                                              группы ________________ 

(фамилия,  имя, отчество)

Место практики _________________________________________________________ ______

 
 

Руководитель  практики от предприятия ___________________________________________

 

(фамилия,  имя, отчество)

 
Дата Краткое описание выполненной  работы Руководитель  практики
 
 
   
 
 
   
     
 
 
   
 
 
   
 
 
   

 

      Начало практики ______________ Конец практики __________________

      Подпись практиканта _________________

 

      Содержание  и объем выполненных работ  подтверждаю.

      Руководитель  практики от предприятия _______________ / ____________________/

            (подпись) (Ф. И. О.)

 
 
 

            М. П.

 

 

Отзыв руководителя практики

 

о работе студента-практиканта:______________________________________

                                                (Ф.И.О.)

по производственной практике.

 

ИМИ БГУ____   Курс____________ Группа_____________

 

            За период с__________20___г. по___________20___г.

 

в_______________________________________________________________

                              (название учреждения)

 

в период практики студента__________________________________________

(краткая характеристика  уровня подготовки и отношения практиканта к работе)

__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

«____» _________________20___г.   Оценка за практику_________

 

Ф.И.О. и подписи  руководителей практики:

( от ИМИ)      Ф.И.О. _____________________

                                                            (подпись)

(от базы практики)       Ф.И.О. _____________________

                                                            (подпись)


Информация о работе Логическое программирование