Генератор фантастических идей
В 1950-х годах специалисты по искусственному интеллекту
начали искать язык, пригодный для манипулирования понятиями, выраженными словами
и фразами на естественном языке. (Искусственный интеллект — раздел информатики,
ставящий своей целью разработку методов решения задач, для которых отсутствуют
формальные алгоритмы: понимание естественного языка, обучение, доказательство
теорем, распознавание образов.) Первый результат тут был получен в виде
семейства языков под названием ИПЛ (IPL, от Information
Processing Languages — языки обработки информации), созданного
одним из пионеров в области искусственного интеллекта Алленом Ньюэллом и его
сотрудниками. Центральным для ИПЛ являлось понятие списка. Представляя данные в
виде списка слов и символов, программист мог связать понятия в памяти компьютера
приблизительно таким же образом, как, по мнению специалистов по искусственному
интеллекту, они связываются в памяти человека [1].
Понятием списка заинтересовался и Джон Маккарти, разносторонний математик, один
из ведущих исследователей в области искусственного интеллекта (причем сам термин
искусственный интеллект был предложен именно им в 1956
году).
Маккарти родился в 1927 году в семье профсоюзного
деятеля. Среди его многочисленных работ наиболее важные относятся к концу 1950-х
годов, когда он работал в Массачусетсском технологическом институте (МТИ).
Маккарти был генератором самых фантастических идей, а также “человеком
поразительной внешности с... шокирующими манерами, например, привычкой
поворачиваться и уходить, оборвав разговор на полуслове”
[2].
В 1957—1958 годах по инициативе Маккарти при МТИ
сформировалась лаборатория искусственного интеллекта, и он вместе с несколькими
студентами стал создавать язык высокого уровня, в котором понятие списка
сочеталось с системой обозначений, заимствованной из специального раздела
математики — так называемого лямбда-исчисления (λ-исчисления). Введенное в 1931 году математиком
Алонзо Черчем, лямбда-исчисление оперирует всего тремя типами элементов [3]:
символами, представляющими переменные и константы; скобками для группировки
символов; обозначениями функций с использованием греческой буквы
лямбда.
Появившийся вскоре язык получил название Лисп
(LISP, от LISt Processing — обработка списков). Спустя
какое-то время вышла статья Маккарти “Рекурсивные функции и символьные
вычисления” [4] с математическим обоснованием применения Лиспа. “Лисп являлся
для нас не просто языком, который используют для определенных целей, — говорил
один из студентов, помогавших Маккарти, — им можно было любоваться, как
прелестной вещью” [1].
Программы и данные Лиспа существуют
в форме символьных выражений, хранимых в виде “списковых” структур.
Употребляются два вида объектов: атомы и списки. Атомы — это символы,
применяемые для идентификации объектов, которые могут быть числовыми или
символьными. Список — это последовательность (возможно, пустая) элементов,
заключенных в круглые скобки, каждый из которых является либо атомом, либо
списком. Для манипулирования списками употребляются так называемые списочные
примитивы (примитивные функции), из которых получаются все другие функции
обработки списков [1, 3, 5—7]. Первая реализация Лиспа была осуществлена на
ламповом компьютере IBM 704. [У нас первый транслятор (интерпретатор) Лиспа был
создан для БЭСМ-6 в конце 1960-х годов.]
Даже небольшой
фрагмент программы на Лиспе способен содержать десятки пар скобок, куда
заключены списки. Часто пары скобок вкладываются друг в друга, образуя список
внутри списка, который, в свою очередь, также находится внутри списка (иногда
бывает 8—10 уровней вложенности). Характерная особенность языка Лисп состоит в
том, что и программы, и данные, обрабатываемые с их помощью, имеют одинаковую
структуру.
В 1960-е годы предпринимались попытки
аппаратной реализации Лиспа, однако реальная возможность решения этой задачи
появилась позже, когда начало интенсивно развиваться производство интегральных
схем. А с 1982 года Лисп-компьютеры (с реализацией различных версий языка) стали
выпускаться серийно целым рядом фирм.
Скорость и легкость,
с которой можно писать, выполнять и изменять программы на Лиспе, способствовали
появлению многочисленных поклонников этого языка и вне лабораторий
искусственного интеллекта [1]. Подобно большинству популярных языков, Лисп имеет
достаточно большое “потомство”. Так, в Великобритании употреблялся появившийся в
1960-х годах язык ПОП-2 (POP 2), названный в честь одного из его создателей
Робина Дж. Поплстона из Эдинбургского университета.
Лиспу
уже более сорока лет, и, несмотря на то, что этот язык имеет определенные
недостатки (например, связанные с уже отмечавшейся необходимостью использования
большого количества скобок), он весьма широко применяется на всех этапах
создания систем искусственного интеллекта и вообще решения сложных логических
задач. “LISP... в течение длительного времени рассматривался как кандидат на
стандарт языка в области искусственного интеллекта. Позднее в эти притязания
вмешался Prolog” [8].
В 1959 году Маккарти предложил
концепцию разделения времени (режим работы компьютера, позволяющий нескольким
программистам, работая за разными терминалами, одновременно использовать его
память и процессор) [1, 2]. Тем самым специалисты избавлялись от необходимости
ждать несколько часов или даже дней, пока их задания будут обработаны машиной.
(По другим данным [9], идею разделения времени впервые высказал англичанин
К.Стрейчи.)
Литература
1. Язык компьютера: Пер. с англ. М.: Мир, 1989.
2. Компьютер обретает разум: Пер. с англ. М.: Мир, 1990.
3. Малыхина М.П., Частиков А.П. Языки программирования: Лисп // Новое в
жизни, науке, технике. Сер. “Вычислительная техника и ее применение”, №
3/89.
4. McCarthy J. Recursive Functions of
Symbolic Expressions and Their Computation by Machine. Part 1. Communications
of the Associations for Computing Machinery, 1960, vol. 3, no.
4.
5. Хелмс Г.Л. Языки программирования: Пер. с
англ. М.: Радио и связь, 1985.
6. Лисп // Информатика, №
17/2000.
7. (Lots (of (Idiotic (Silly (Parentheses))))) //
Информатика, № 40/2001.
8. Толковый словарь по
вычислительной технике (Microsoft Corporation): Пер. с англ. М.: Издательский
отдел “Русская редакция” ТОО “Channel Trading Ltd.”, 1995.
9. Частиков А.П. От калькулятора до суперЭВМ // Новое в жизни, науке,
технике. Сер. “Вычислительная техника и ее применение”, № 1/88.