Декларативные (описательные) языки программирования
Предназначены для решения задач искусственного интеллекта, к ним относят такие языки, которые способны в зависимости от набора исходных данных модифицировать алгоритм работы, т.е. «на ходу» менять программу.
Функциональные языки. В их основе лежит понятие функции как «черного ящика», имеющего вектор параметров (аргументов)на входе и результатr(скаляр) на выходе:
(7.1)
В функциональных языках программирования отсутствуют операторы: все действия, в том числе и управляющие конструкции, выполняются при помощи вызовов функций. Поскольку каждая функция возвращает значение, ее можно подставить в качестве аргумента другой функции, что позволяет записывать сложные выражения в функциональной форме. Одним из первых функциональных языков стал интерпретируемый язык LISP(Лисп), созданный в конце 50-х гг.
Логические языки. Логическое программирование представляет собой попытку возложить на программиста только постановку задачи, а поиски путей ее решения предоставить транслятору. Язык этой группыProlog(Пролог) был создан в начале 70-х годов Аланом Колмероэ. В его основу положена математическая модель теории исчисления предикатов. Программа на этом языке строится из последовательности фактов и правил, а затем формулируется утверждение, которое Пролог будет пытаться доказать с помощью введенных правил. Человек только описывает структуру задачи, а внутренний «мотор» Пролога сам ищет решение с помощью методов поиска и сопоставления.
Объектно-ориентированные языки программирования
Это направление стало разрабатываться в середине 70-х гг. Керниганом и Риччи. Представляет собой отображение объектов реального мира, их свойств (атрибутов) и связей между ними при помощи специальных структур данных (классов). Начало реализации положили ОО-версии языков Си и Паскаль,.
Object Pascal. Объектно-ориентированное расширение языкаPascal.
C++ (Си++).Объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году.
Java (Джава, Ява). Этот язык был создан компаниейSunв начале 90-х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка – компиляция не в машинный код, а в платформно-независимый байт-код (каждая команда занимает один байт). Этот байт-код может выполняться с помощью интерпретатора – виртуальнойJava-MaшиныJVM(JavaVirtualMachine), версии которой созданы для любых платформ. Благодаря наличию множестваJava-машин программы наJavaможно переносить не только на уровне исходных текстов, но и на уровне двоичного байт-кода, поэтому язык Ява стал очень популярным. Особое внимание в развитии этого языка уделяется двум направлениям: поддержке всевозможных мобильных устройств и микрокомпьютеров, встраиваемых в бытовую технику (технологияJini) и созданию платформно-независимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами (технологияJavaBeans). Пока основной недостаток этого языка – невысокое быстродействие, так как язык Ява интерпретируемый.
Smalltalk(Смолток). Интерпретируемый язык, созданный в корпорации XEROX в 1980 году. Синтаксис языка очень компактен и базируется исключительно на понятии объекта. В этом языке отсутствуют операторы или данные. Все, что входит в Смолток, является объектами, а сами объекты общаются друг с другом исключительно с помощью сообщений (например, появление выражения I+1 вызывает посылку объекту I сообщения «+», то есть «прибавить», с параметром 1, который считается не числом-константой, а тоже объектом). Больше никаких управляющих структур, за исключением «оператора» ветвления (на самом деле функции, принадлежащей стандартному объекту), в языке нет, хотя их можно очень просто смоделировать. Сегодня версия VisualAge for Smalltalk активно развивается компанией IBM.
Lisp декларативный язык программирования
Декларативные Языки Программирования
Лисп (LISP, от англ. «List Processing» — «обработка списков») — первый язык программирования, поддерживающий функциональную парадигму программирования. Нетипизирован, содержит массу императивных свойств, однако в общем поощряет именно функциональный стиль программирования. При вычислениях использует «вызов-по-значению». Существует объектно-ориентированное расширение языка — CLOS.
Основной структурой для хранения и манипулирования информацией в языке Лисп служит список.
Списками являются даже функции, имеющие несколько входных параметров, и один или несколько выходных (результат функции). Программа представляет из себя список из нескольких функций (дерево функций), поэтому с точки зрения самого языка программа на нём также может являться (и зачастую является) входными данными. Чтобы использовать функцию, её надо определить. Определение функций происходит также через функцию.
Сильными сторонами Лиспа являются однородность (в том числе, как уже указано, один формат представления программы и данных) и простота синтаксиса. Это позволяет легко создавать расширяемые системы, которые могут автоматически генерировать части собственного кода. К недостаткам можно отнести необычный вид программ, трудности с освоением после использования современных объектно-ориентированных языков.
Многие начинающие программисты основной проблемой Лиспа считают огромное количество скобок «(» и «)» в тексте программ (основные диалекты Лиспа не поддерживают различные скобки). Редактирование Лисп-программ можно значительно упростить, используя текстовый редактор, поддерживающий автоматическое выравнивание кода, подсветку соответствующих пар скобок и команды типа «перейти через список вправо». Одним из таких редакторов является Emacs.
Текст программы на Лиспе, печатающий сам себя:
((lambda (x) (list x (list (quote quote) x))) (quote (lambda (x) (list x (list (quote quote) x)))))
Данная программа работа ет на большинстве диалектов Лиспа.
Лисп используется как скриптовый язык в текстовом редакторе Emacs. По сути, большая часть Emacs’а написана на Лиспе, и он представляет собой большую расширяемую систему.
Лисп используется в оконном менеджере Sawfish. В данном оконном менеджере используется диалект Лиспа Rep, который в значительной степени повторяет диалект Лиспа от Emacs, устраняя ряд его недостатков. Sawfish.