
- •Декларативные и императивные языки.
- •Стандартизация языков программирования
- •Типы данных
- •Структуры данных
- •Парадигма программирования
- •Способы реализации языков
- •Языки функционального программирования
- •Создание универсального функционального языка.
- •3. Символьная обработка и искусственный интеллект.
- •4. Применение искусственного интеллекта.
- •5. Основы языка лисп (6 – 15 вопросы)
- •6. Символы и списки
- •7. Понятие функции
- •8. Базовые функции Лиспа.
- •9. Имя и значение символа Лиспа.
- •10. Определение функций Лиспа.
- •11. Передача параметров в область их действия Лиспа.
- •11. Вычисления в Лиспе.
- •13 . Внутреннее представление списков в Лиспе
- •14. Свойства символа Лиспа.
- •15. Ввод и вывод в Лиспе.
- •16.Основы рекурсии.
- •17.Простая рекурсия.
- •18.Другие виды рекурсии.
- •19.Функции более высокого порядка.
- •20.Применяющие функционалы.
- •21.Отображающие функционалы.
- •22.Замыкания.
- •23.Абстрактный подход в Лиспе.
- •24.Макросы.
- •25.Понятия. Числа. Символы. Списки. Строки. Последовательности. Массивы. Структуры.
- •26.Развитие языка лисп и лисп-системы. История лисПа. Лисп-системы. Лисп-машины.
26.Развитие языка лисп и лисп-системы. История лисПа. Лисп-системы. Лисп-машины.
История ЛИСПа.
До 80-х годов Лисп в основном использовался теоретиками программирования как формальный язык и был средством лабораторных исследований искусственного интеллекта. Отец Лиспа - Джон Маккарти Лисп не является результатом коллективной деятельности комитетов или поиска компромиссов, он прежде всего отражает личное видение сущности и возможностей программирования одного человека, Джона Маккарти. Возраст языка и продолжающийся рост его применения вне рамок чисто научных лабораторий показывают, что в идеях Маккарти есть нечто значимое и непреходящее.
Джон Маккарти родился в 1927 г., он изучал математику в Калифорнийском техническом
университете и окончил его в 1948 г. В Массачусетском технологическом институте он вместе с Марвином Минским начал работы по проекту искусственного интеллекта и взялся создать такой язык программирования, который бы хорошо подходил для программирования задач искусственного интеллекта. Свою пионерскую работу по разработке Лиспа Маккарти осуществлял в MIT с 1958 по 1963 г., после чего он перешел в Стенфордский университет в Калифорнии, где стал работать профессором по искусственному интеллекту. Обработка списков и искусственный интеллект Интерес Маккарти к алгебраической обработке списков и к исследованию искусственного интеллекта побудил его принять участие в 1956 г. в летней школе по искусственному интеллекту в Дартмуте (США), которая считается первой организованной встречей по исследованиям в этой области. На этой школе А.Ньюэлл, Дж.Шоу и Г.Саймон представили разработанный ими язык IPL. IPL не получил широкого распространения из-за своей чрезмерной близости к машинному языку. Однако благодаря ему родилась идея хранения программ и данных в памяти в виде структур, связанных ссылками, независимыми от физического расположения структур, в виде списков. Для списков не нужно было заранее резервировать в памяти некоторую область, их можно было создавать, изменять и удалять динамически. Сначала у Маккарти была мысль реализовать обработку списков IPL в Фортране.
Маккарти осознавал значимость структур и форм представления в задачах искусственного интеллекта. Для символьных цепочек IPL Маккарти придумал основанную на скобках форму представления, иерархическую списочную запись, а также точечную нотацию соответствующую внутреннему представлению. Используя понятие пустого списка - NIL, ему удалось элегантно определить основные алгебраические действия по обработке списков. Так родились примитивные функции и предикаты: CAR, CDR, CONS, ТАТОМ и EQ, необходимые для анализа, конструирования и сравнения списков. Из лямбда-исчисления Черча (Church 1941) для определения функций он заимствовал абстрактное и достаточно простое понятие лямбда-выражения.
Может быть самой важной была идея об единообразном представлении программ и данных в виде списков, благодаря чему стала возможной как работа с программой и ее интерпретация в качестве данных, так и интерпретация данных и работа с ними как с
программой. Благодаря единообразному представлению программ и данных функции можно передавать в качестве параметров другим функциям, также стало возможным преобразование.
Развитие Лисп-систем повлияло на распространение систем разделения времени в 60-х
и 70-х годах, а также на распространение в 80-х годах дисплеев, позволяющих работать с окнами. Однако наиболее существенное значение заключается все-таки в математической системе понятий в формализме, оказавшем большое влияние на развитие программирования как науки.
Первая реализация интерпретатора Лиспа появилась осенью 1958 г., когда в MIT начались исследования по проекту искусственного интеллекта, предложенного Маккарти и Минским. Первый интерпретатор был реализован на компьютере IBM 704.
ЛИСП-системы.
Маклисп
В начале 60-х годов в MIT был начат проект MAC (Multiple Access Computer или Machine Aided Cognition). Его цель - исследование использования вычислительных машин в диалоговом режиме, а также реалнгация подходящих операционных систем и языков программирования. Маклисп получил свое название от проекта MAC. В рамках проекта MAC возникла и лаборатория машинных знаний, а позднее лаборатория искусственного интеллекта. Работа над проектом MAC, проводимая в вычислительном центре МIТ и над операционными системами CTSS и Multics компьютеров IBM 7094 и GE 634 привела к созданию новых методов, которые позднее получили широкое распространение. Маккарти при разработке языка Lisp 1 изобрел способ, позволявший запускать интерпретатор Лиспа параллельно с пакетными работами . Именно этот способ дал начало новой форме использования ресурсов ЭВМ, получивший известность под названием "системы разделения времени" .
Кроме символьной обработки Маклисп широко использовался в традиционных числовых вычислениях, применяемых, например, в обработке речи и изображений. Кроме исследователей искусственного интеллекта и разработчиков алгебраической системы.
Большую часть своих свойств Маклисп приобрел под влиянием стоящих перед исследователями искусственного интеллекта проблем и накопленного ими опыта. Так в язык попали макросы чтения и таблицы чтения, позволявшие легко изменять и расширять структуру языка. Таким же образом из требований к программам и окружению возникли управляющие структуры (такие, как catch и throw), механизмы обработки прерываний и ошибок, а также использование управляющих символов.
Всего в Маклиспе используется около 400 функций.
Вероятно, самым большим недостатком системы является то, что ее никогда не документировали должным образом
BBN-Lisp, Xerox и Интерлисп
В середине 60-х годов Лиспом заинтересовались вооруженные силы США, а также многие
исследовательские центры, такие как SDC (System Development Corporation), BBN(Bolt, Beranek and Newman Inc.), SRI (Stanford Research Institute). Фирма BBN, работавшая недалеко от MIT и являющаяся одной из ведущих в США исследовательских фирм в области искусственного интеллекта, в 1966 г. начала разрабатывать свою версию Лиспа для компьютеров SDS-930 (Scientific Data Systems) и PDP-10. Именно эта версия для PDP-10 способствовала тому, что компьютеры PDP-10/20 оставались важнейшими машинами для
исследований искусственного интеллекта вплоть до 80-х годов.
BBN-Lisp был разработан на PDP-10 как подсистема созданной на самой фирме
BBN операционной системы TENEX. TENEX опирается на аппаратный механизм страничной организации памяти, созданный специально для поддержки больших лисповских программ. Помимо страничной организации памяти в систему команд были добавлены команды работы со стеком и расширен набор регистров для ускорения переключения от одной задачи к другой.
В1972 г., когда началось сотрудничество с фирмой Xerox, BBN-Lisp превратился в Интерлисп (Teitelman 1978), так как Xerox стала сотрудничать с BBN. Именно Xerox купила обанкротившуюся в то время компанию SDS, на машинах которой работал BBN-Lisp. Машины SDS не имели успеха, но несмотря на это, Интерлисп развивался дальше. К 1978 г. представлял собой интегрированную среду программирования, в которую вошло множество различных вспомогательных средств, описанных нами в главах, посвященных программному окружению.
Алан Кэй уже в конце 60-х годов предложил идею Dynabook подхода к компьютерам будущего и интерфейсу между человеком и машиной. Работа XLG привела в 70-х годах к разработке языка программирования Smalltalk и объектного программирования.
При создании Интерлиспа работа велась весьма тщательно. Система хорошо документирована и более новые версии совместимы с более ранними. Так преимуществом системы стало непрерывно пополняющееся большое количество переносимого программного обеспечения. С другой стороны, ограничение системы старым зафиксированным уже в конце 70-х годов диалектом сделало систему отчасти устаревшей и трудно расширяемой.
В Интерлиспе среди прочего отсутствуют иерархические типы данных, объекты и замыкания. К тому же он базируется на динамическом связывании, тогда как новые версии Лиспа - статические. Однако из Интерлиспа берет начало новая версия - Коммон Лисп.
Standard Lisp и PSL
В связи с переездом Маккарти в Стенфорд в 1963 г. и Лисп перекочевал на западное побережье США. Из разработанных в Калифорнии систем прежде всего необходимо упомянуть стенфордский Lisp ) и Stanford Lisp/360. Вместе с Э.Херном Лисп попал в Солт-Лейк-Сити в штат Юта. Коллеги Херна были заинтересованы в методах символьной математики для исследований в области теоретической физики, которые он запрограммировал на Лиспе. Таким образом возникла одна из наиболее популярных алгебраических систем, известная под названием Reduce. Школа Юта вскоре занялась созданием своей версии Лиспа, которая должна была больше подходить для математических манипуляций и быть по возможности более машинно-независимой и переносимой. В 1966 году Херн опубликовал спецификацию Standard Lisp (Стандарт Лисп) в качестве предложения по стандартизации языка. Предложение, однако, не получило
широкой поддержки, так как оно не понравилось исследователям искусственного интеллекта и они не одобрили его. Мешающим фактором в языке была, например, привязанность к типам.
PSL проектировался специально для переноса программ системы Reduce на новые устройства (так же как Franz Lisp и NIL для переноса Максимы, см. ниже). В стандарт PSL для улучшения переносимости входит сокращенный набор примитивных лисповских
функций и структур.
Лисп-машин для Зеталиспа.
Новый диалект был реализован в Университете в Беркли на ЭВМ VAX 780/11 на языке Си под управлением системы UNIX(Fateman 1981). Franz Lisp довольно широко используется как под управлением UNIX, так и под управлением VAX/VMS и в настоящее время
является наиболее часто используемой версией Лиспа для систем разделения времени. Кроме того, он широко используется и на 32-битовых микро-ЭВМ и рабочих
станциях, работающих под управлением UNIX.
Благодаря своей хорошей переносимости Franz Lisp получил распространение во многих университетах и исследовательских учреждениях.
Стандарт Коммон Лиспа
Стандарт пытались подготовить в Университете Карнеги-Меллона как продолжение работы по проекту Spice Lisp, целью которого было определение и реализация развитой лисповской программной среды для персональной рабочей станции'. Начальный проект по стандартизации назвали COMMON USP Коммон Лисп, с целью определить
единый базовый язык, на основе которого МОЖНО было бы реализовать совместимые системы и одновременно допустить в каждой реализации разработку своих расширений и своей среды.
В определении языка участвовало около 80 специалистов из разных университетов, исследовательских центров и фирм. Проектирование языка и формирование стандарта происходили в основном через сеть Агра, через которую было послано свыше 3000 сообщений. Наибольшее влияние на эту работу оказали диалекты Маклиспа с восточного побережья, но также и Интерлисп. Многие новые черты заимствованы из Зеталисп Лисц-машин.
Коммон Лисп не является официальным стандартом, он только лишь представляет
рекомендуемую спецификацию языка, которая де-факто стала стандартом. Коммон Лисп определяет сотни встроенных функций, форм и системных имен. Они отражают свойства, известные по различным Лисп- системам и которые, как показалось, можно зафиксировать на настоящем этапе. Одной из целей было также обеспечение совместимости с ранними версиями, однако при этом избежав трудностей старых систем.
ЛИСП-машины.
В 70-х гг. родилась идея об отдельной Лисп-машине и о маневре, который известен под названием "бегство из разделения времени" (escape from timesharing).
Первый отчет, связанный с Лисп-машинами, появился в серии изданий лаборатории искусственного интеллекта MIT в 1974 г. (Greenblatt 1974), а интегральная схема LSI "Lisp on a Chip" была изготовлена в 1978 г. (Steele, Sussman 1980). Первые промышленные Лиспмашины появились на рынке несколько лет спустя.
Целью проектирования Лисп-машин была разработка их в виде персональных ЭВМ, которые можно было бы использовать не только для профессиональных исследований в области искусственного интеллекта, но и для различных промышленных и коммерческих
приложений. Разработке и их распространению помешала необходимость переноса программного обеспечения большого объема из дорогой среды больших машин. По производительности оборудования Лисп-машины очень эффективны, кроме того, они имеют большой объем основной памяти. Их аппаратура спроектирована специально для вычислений на Лиспе.
Однако наиболее существенным преимуществом такой аппаратуры является возможность использования на Лисп-машине интегрированной программной среды. В ней наряду с самим Лиспом содержатся разнообразные программные средства, которые
использует тысячи функций. Во многих системах помимо Лиспа доступны и другие языки (Паскаль, Ада, Фортран, Си, Пролог и др.). Так, в систему можно добавить реализованные ранее на других языках части или сделать традиционное программирование более эффективным с помощью разнообразнейших средств, имеющихся на Лисп-машине.