Как ориентироваться в материале данной книги

Эту книгу можно читать подряд — от начала и до конца. Однако такому порядку следовать не обязательно. Читатели, уже знающие Пролог, могут непосредственно переходить к интересующим их темам. На полях книги*) размещаются заголовки, облегчающие поиск нужных разделов. Имеется также обширный предметный указатель, который поможет читателям лучше ориентироваться в материале книги. Некоторые основные специальные термины поясняются в глоссарии в приложении I.

Введение Зачем нужно изучать Пролог?

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

Взгляд на мир, навязываемый языком программирования

Язык программирования навязывает пользователям определенный взгляд на окружающий мир. Это проявляется в том, что программист, длительное время пользующийся некоторым языком и усвоивший соответствующий этому языку взгляд на мир, будет стремиться находить новые сферы применения для тех типов вычислений, к которым данный язык приспособлен, и будет избегать задач, для решения которых этот язык не годится. Предположим, что целью написания программы для ЭВМ является либо решение определенной задачи, либо представление системы, существующей в реальном мире, таким образом, чтобы программа могла использоваться для моделирования поведения этой системы. Целесообразно оценивать взгляды на мир, навязываемые различными языками программирования, в соответствии с тем, насколько хорошо они соответствуют указанным выше целям. Данные рассуждения относятся к метапрограммной инженерии: задана цель программирования (см. выше); нужно определить, какие языки и программные средства наилучшим образом ей удовлетворяют.

Семантика языков программирования

Один из путей исследования взглядов на мир, навязываемых языками программирования, — это изучение семантики (смысла) языковых конструкций. Программирование при помощи конструкций некоторого языка требует мышления в терминах семантики этих конструкций. Таким образом, семантика служит ключом к пониманию процесса мышления программиста. Языки программирования можно разбить на три широкие категории в соответствии с природой семантики этих языков: 1) процедурные языки, 2) функциональные языки и 3) реляционные языки. Смысл конструкции процедурного языка определяется в терминах поведения компьютера при выполнении этой конструкции. Поведение может быть либо внешним (например, вывод сообщения на терминал), либо внутренним (например, изменение значения переменной). Смысл конструкции в функциональном языке (например, вызова функции) определяется в терминах значения, которое она вырабатывает. Вызов функции можно рассматривать как объявление вырабатываемого ею значения. Смысл конструкции в реляционном языке определяется как отношение между отдельными сущностями или классами сущностей. С декларативной точки зрения реляционную конструкцию можно интерпретировать как формулировку того, что существует отношение между аргументами, представленное именем этого отношения.

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

Преимущества реляционного образа мышления

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

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

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие