На этом шаге мы рассмотрим парадигмы программирования, применяемые в задачах искусственного интеллекта.
Первые языки программирования искусственного интеллекта были разработаны еще в начале 60-х годов, когда начались исследования в области искусственного интеллекта и было замечено, что задачи в этой области существенно отличаются как от расчетных задач, так и от задач обработки деловой информации. Они связаны с обработкой символов (в широком смысле слова), плохо представимой в виде единственного жестко заданного алгоритма, поэтому в основу языков программирования искусственного интеллекта положено два принципа:
Среди языков программирования искусственного интеллекта ведущее место занимают LISP и PROLOG. В США и в Японии несмотря на широко известный проект создания компьютеров пятого поколения, где декларировалось использование языка PROLOG, доминирует LISP, в Европе предпочтение отдается языку PROLOG. Эти языки - классические представители декларативного ( PROLOG) и функционального (LISP) подходов к программированию. В процессе исследований в области искусственного интеллекта возникали новые подходы и языки. Однако к настоящему времени лишь немногие из этих языков получили хотя бы ограниченное распространение - сюда можно отнести POP, Tablog, LOGO, LogLisp, SNOBOL, Рефал. Утвердиться на рынке смогли пока лишь PROLOG, LISP и в некоторой степени OPS5.
LISP (а вернее, его современные диалекты) - не единственный язык, используемый для задач искусственного интеллекта.
Например, POP-2 - язык программирования, разработанный в Эдинбургском университете (Великобритания) с ориентацией на исследования в области искусственного интеллекта. POP-2 представляет возможности для манипулирования связанными структурами данных - так же как язык LISP, но имеет более простую структуру процедур, поэтому он стал более доступным для программистов, работавших ранее с языком ALGOL.
Уже в середине 60-х годов, т.е. на этапе становления языка LISP, разрабатывались языки, предлагающие другие концептуальные основы. Наиболее важными из них в области обработки символьной информации являются SNOBOL, разработанный в лаборатории Белла, и Рефал, созданный в ИПМ АН СССР.
Язык SNOBOL - язык обработки строк, в рамках которого впервые появилась и была реализована в достаточно полной мере концепция поиска по образцу. Язык SNOBOL был одной из первых практических реализаций развитой продукционной системы. Наиболее известная и интересная версия этого языка - SNOBOL-IV. Здесь техника задания образцов и работа с ними существенно опередили потребности практики. Может быть, именно это, а также политика активного внедрения языка LISP помешали широкому использованию языка SNOBOL в области искусственного интеллекта. По существу, он так и остался "фирменным" языком программирования, хотя концепции языка SNOBOL, безусловно оказали влияние и на LISP, и на другие языки программирования задач искусственного интеллекта.
В основу языка Рефал положено понятие рекурсивной функции, определенной на множестве произвольных символьных выражений. При обработке символов активно используется концепция поиска по образцу, характерная для языка SNOBOL. Таким образом, Рефал вобрал в себя лучшие черты наиболее интересных языков обработки символьной информации 60-х годов. В настоящее время язык Рефал-5 используется для автоматизации построения трансляторов, систем автоматических преобразований, а также, подобно языку LISP, в качестве инструментальной среды для реализации языков представления знаний.
OPS5 - язык, получивший распространение в основном на мини-компьютерах и больших машинах. В отличие от всех других языков программирования искусственного интеллекта, OPS5 не универсальный, а специализированный язык программирования, позволяющий достичь максимального отношения в соотношении "эффективность работы/простота" при решении задач разработки экспертных систем. Известно, что системы, реализованные с помощью этого языка, должны укладываться в достаточно жесткие синтаксические рамки, однако опыт создания многих сложных экспертных систем показывает, что средств языка OPS5 в большинстве случаев достаточно.
Уже накоплен определенный опыт реализации интеллектуальных систем и можно говорить о том, что в области искусственного интеллекта сформировались определенные парадигмы программирования. Основными из них, по-видимому, являются функциональная, логическая и продукционная парадигмы.
Конечно, в современной практике интеллектуального программирования отдельные парадигмы редко используются в чистом виде. И в качестве примеров слияния различных парадигм можно привести не только отдельные языки, но и целый подход к программированию интеллектуальных систем на базе продукционной парадигмы, в рамках которой взаимодействие правил-продукций может опираться на функциональную парадигму, а унификация условий применимости правил - на логическую.
Таким образом, современный этап программирования интеллектуальных систем характеризуется тенденцией смешанного использования разных парадигм.
Анализ существующих языков обработки символьной информации, использование их для реализации интеллектуальных систем, а также сравнение тенденций развития этих языков позволяют сделать несколько замечаний.
Мы закончили рассматривать основные парадигмы программирования. Со следующего шага мы начнем более подробно знакомиться с особенностями языка LISP, в частности, остановимся на функции назначения.