Главная / Искусственный интеллект / Лисп совершает революцию

Лисп совершает революцию

Лисп - язык манипулирования символами

Патрик Г. Уинстон

В отличие от большинства языков программирования Лисп ориентирован на обработку символьных, а не числовых данных. Чтобы пояснить это, рассмотрим примеры манипулирования символами, взятыми из программы Манипулятор, которая перемещает детские кубики, подобные изображенным на рис. 1.

Рис. 1. Так выглядит мир кубиков, в котором действует программа Манипулятор.

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

Программа знает об этом, поскольку символы В1 и В4 содержатся в списке символов, получаемых применением к В3 команды get (получать) (В языке Лисп принято различать переменную и ее значение с помощью специального значка «цитирования». Так, если известно, что х=5, то употребление 'х означает «само х как таковое», а просто х означает 5):

(get 'В3 'поддерживаемые-предметы) → (Bl В4)

Теперь представим, что значением переменной «препятствия» является список предметов, лежащих на кубике В3. Стандартные функции Лиспа, работающие с символами, позволяют быстро находить ответы на основные вопросы:

Сколько всего препятствий, т. е. какова длина (length) этого списка?
  (length препятствия) → 2
Что является первым (first) объектом этого списка?
  (first нрепятствия)→В1
Входит (member) ли элемент В1 в число препятствий?
  (member 'Bl препятствия)→t
Является ли В4 первым элементом списка?
  (eq'В4 (first препятствия))→nil

Заметим, что символ t в Лиспе обозначает истину, а символ nil — ложь. Другие элементарные функции, используемые при работе с символами, служат для внесения изменений в список и проверки того, является ли список пустым:

Удалить (remove) В4 из списка
  (setf препятствия (remove 'В4 препятствия)) →(В1)
Добавить В7 к списку
  (serf препятствия (cons 'В7 препятствия)) → (В7 В1)
Является ли список объектов пустым?
  (endp препятствия)→nil
Измененный список может быть снова связан с символом В3:
  (setf (get 'В3 ' поддерживаемые-предметы) препятствия)

Все эти вопросы и изменения являются самыми элементарными примерами возможностей работы Лиспа с символами. Подобным образом манипулирование символами позволяет программе Манипулятор запоминать свои действия. Соответствующая подпрограмма содержит команды, которые исследуют и видоизменяют символьные выражения, описывающие сделанные перестановки. Эти выражения позволяют отвечать на вопросы типа следующих: Переставлял ли ты кубик В7? Каким образом ты переставил кубик В7? Зачем ты переставил кубик В7? Когда ты переставил кубик В7?

Используя операции над символами, программа Манипулятор может объяснять свои действия подобно тому, как это делает человек. Действия с символами имеют самое прямое отношение к искусственному интеллекту, и не удивительно, что Лисп стал основным языком для его приложений.

Специалисты по вычислительной технике должны знать Лисп

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

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

Благодаря успехам применения языка Лисп ныне многие преподаватели вычислительной техники пришли к выводу, что понимание Лиспа необходимо всем, работающим в этой области знаний. Другой причиной такого отношения к Лиспу является то, что он зарекомендовал себя как язык, прекрасно подходящий для иллюстрации многих основных концепций вычислительной техники. Например, в Массачусетсом технологическом институте диалект Лиспа под названием Scheme многие годы используется как основной язык во вводном курсе по языкам программирования.

Заключение

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

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