ЛИСП — язык функционального программирования

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

ВНИМАНИЕ! Работа на этой странице представлена для Вашего ознакомления в текстовом (сокращенном) виде. Для того, чтобы получить полностью оформленную работу в формате Word, со всеми сносками, таблицами, рисунками (вместо pic), графиками, приложениями, списком литературы и т.д., необходимо скачать работу.

Содержание

Введение 3
1 ЛИСП - язык функционального программирования. 4
1.1 Возникновение и развитие языка Лисп 4
1.2 Основные элементы языка ЛИСП 9
2 Особенности диалектов языка Лисп 11
2.1 Диалекты Лиспа 11
2.2 Лисп-машины 20
Заключение 22
Глоссарий 24
Список использованных источников 26
Приложение А 27

Введение

Уже сегодня рынок персональных компьютеров практически перешел на многоядерные и мультипроцессорные системы, в связи с этим от современного программного обеспечения требуется полное использование современных возможностей аппаратуры.
Лисп является функциональным языком, в котором текст и данные программы представлены одинаково. Кроме этого сам механизм виртуальной машины довольно прост в реализации. Язык Лисп является вторым по счету языком высокого уровня и изначально был придуман для работы со списками (List Processing). Данная его особенность ориентировала его на подмножества натурального языка, делая его удобным для решения задач искусственного интеллекта. Рекурсия и лямбда-выражения сделали язык удобным для математических исследований, а также для создания баз данных. Язык логического программирования – Prolog, как ни странно очень просто реализуется на языке Лисп. Идея рекурсивного параллелизма в данном языке так же стара, как и он сам. Дело в том, что все выполнение Лисп программы основано на рекурсии, таким образом, можно сделать вывод, что данная тема актуальная на сегодняшний день.
Целью данной курсовой работы является рассмотрение особенностей языка Лисп.
Для реализации поставленной цели считаю необходимым раскрыть следующие задачи:
- рассмотреть основные особенности Лиспа;
- изучить элементарные понятия Лиспа;
- проанализировать диалекты Лиспа;
- рассмотреть Липс-машины.
При выполнении курсовой работы был задействован разнообразный монографический материал, данные периодической печати и интернет-сайтов.

1 ЛИСП - язык функционального программирования.

1.1 Возникновение и развитие языка Лисп

C 1950-х годов специалисты по искусственному интеллекту искали язык, пригодный для манипулирования понятиями, выраженными словами и фразами на естественном языке. Первым результатом усилий, сделанных в этом направлении, явилось семейство языков под названием ИПЛ (IPL, от Information Processing Languages - языки обработки информации) [1]. Центральным для ИПЛ было понятие списка. Представляя данные в виде списка слов и символов, программист мог связать понятия в памяти компьютера примерно таким же образом, как, по мнению специалистов по искусственному интеллекту, они связываются в памяти человека.
Понятие списка интересовало и Джона Маккарти, разностороннего математика, одного из ведущих исследователей в области искусственного интеллекта (причем сам термин искусственный интеллект был предложен именно им в 1956 году). Вместе со студентами Массачусетсского технологического института он начал работу над языком высокого уровня, в котором понятие списка сочеталось с системой обозначений, заимствованной из специального раздела математики - так называемого лямбда-исчисления.
Введенное в 1931 году А.Черчем, лямбда-исчисление оперирует только тремя типами элементов:
1) символами, представляющими переменные и константы,
2) скобками для группировки символов и
3) обозначениями функций с использованием греческой буквы лямбда.
Появившийся вскоре язык получил название "Лисп" (LISP, от LISt Processing - обработка списка). Через некоторое время вышла статья "Рекурсивные функции и символьные вычисления" [2] с математическим обоснованием применения Лиспа, "Лисп был для нас не просто языком, который используют для определенных целей, - говорили студенты, помогавшие Маккарти, ?им можно было любоваться, как прелестной вещью" [1].
(Кстати, в 1959 году Маккарти предложил концепцию разделения времени, применение которой дало возможность почти одновременно обслуживать одним мощным компьютером большое количество пользователей, работающих за терминалом, избавляя их от необходимости ждать, пока одна за другой обрабатываются их программы.)
Программы и данные Лиспа существуют в форме i символьных выражений, которые хранятся в виде "списковых" структур. Употребляются два вида объектов: атомы и списки. Атомы - это символы, применяемые для идентификации объектов, которые могут быть числовыми или символьными. Список - это последовательность (возможно, пустая) элементов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. Для манипулирования списками употребляются так называемые списочные примитивы (примитивные функции) Car, Car и Cons [3, 4], из которых получаются все другие функции обработки списков. Саг и Car выделяют из списка первый и остальные элементы соответственно, а Cons соединяет два списка в один.
Интересно, что названия Саг и Cdr остались в Лиспе "на память" от первой реализации языка на ламповом компьютере IBM 704". Они являются сокращением английских терминов (характерных для машин первого поколения), означающих "содержимое адресной части регистра" и "содержимое уменьшаемой части регистра" [4].
Характерная особенность языка Лисп состоит в том, что и программы, и данные, которые они обрабатывают, имеют одинаковую структуру.
В 1960-е годы предпринимались попытки аппаратной реализации Лиспа, однако реальная возможность решения этой задачи появилась позже, одновременно с бурным развитием производства интегральных схем. Ну а с 1982 года Лисп-компьютеры (с реализацией различных версий языка) стали выпускаться серийно целым рядом фирм.
Хотя Лиспу уже больше сорока лет (причем язык имеет некоторые недостатки, в том числе связанные с необходимостью использования большого количества скобок, а также с наличием нескольких диалектов), он остается популярным на всех этапах создания систем искусственного интеллекта и вообще решения сложных логических задач.
В основу языка положен серьезный математический аппарат:
• лямбда-исчисление Черча
• алгебра списочных структур
• теория рекурсивных функций
Долгое время язык использовался узким кругом исследователей. Широкое распространение язык получил в конце 70-х - начале 80-х годов с появлением необходимой мощности вычислительных машин и соответствующего круга задач. В настоящем - Лисп одно из главных инструментальных средств систем искусственного интеллекта. Он принят как один из двух основных ЯП для министерства обороны США и постепенно вытесняет второй ЯП - АДА.
Система AutoCAD разработана на Лиспе.
До изучения языка трудно говорить об его особенностях, но
тем не менее...
Представление программы и данных производится одинаково - через списки. Это позволяет программе обрабатывать другие программы и даже саму себя.
Лисп как правило является интерпретирующим языком, также как BASIC.
Лисп безтиповый язык, это значит что символы не связываются по умолчанию с каким-либо типом.
Лисп имеет необычный синтаксис. Из-за большего числа скобок LISP расшифровывают как Lots of Idiotic Silly Parentheses.
Программы, написанные на Лиспе во много раз короче, чем написанные на процедурных языках.
Современные диалекты языка Лисп можно рассматривать как мощные интерактивные системы программирования. Это объясняется двумя причинами. Во-первых, сам язык Лисп претерпевает серьезные изменения - развиваются средства языка, предназначенные для обработки нетрадиционных для Лиспа типов данных: массивов, векторов, матриц; появляются некоторые средства управления памятью (пакеты), отсутствующие в Лиспе. Серьезные изменения претерпевают и управляющие структуры. Появились несвойственные природе языка Лисп функции, заимствованные из Фортрана, Алгола, Паскаля, Си: Do, Loop, Goto , Case и прочие, позволяющие пользователю, незнакомому с принципами функциональных языков, легко переходить на Лисп. Качество программ снижается, зато возрастает популярность языка. Во-вторых, если на первом этапе развития Лисп-системам была присуща небольшая скорость обработки данных и серьезные ограничения на емкость используемой оперативной памяти, то современные Лисп-системы уже могут соперничать по этим параметрам с такими языками, как Си, Паскаль и др. Использование Лисп-машин вообще практически снимает ограничения памяти и быстродействия.
Для ПЭВМ ограничения по памяти и быстродействию все еще остаются существенными. Однако положение не безнадежно. Развитие Лисп-систем для ПЭВМ идет сегодня по трем различным направлениям. Первое связано с увеличением емкости памяти, которая может использоваться Лисп-системой. С этой целью ряд компаний разработал версии языка Golden Common Lisp, использующие расширения оперативной памяти и виртуальную память. Второе направление связанно с повышением быстродействия Лисп-систем. Третье направление состоит в разработке эффективных компиляторов программ с языка Лисп в традиционные языки (чаще всего в язык Си).
Положительным нововведением в современные диалекты языка можно считать псевдоассемблерные команды, которые позволяют оперировать основными регистрами машины и организовывать прерывания на уровне DOS и BIOS. Кроме того, многие Лисп-системы имеют хорошие интерфейсы с другими языками (Фортран, Паскаль, Ассемблер, Си), что позволяет повысить эффективность прикладных Лисп-программ.
Если же говорить о глобальной тенденции развития самой идеологии языка Лисп, то очевидно, что она связана с созданием объектно-ориентированных версий языка как наиболее пригодных для реализации систем ИИ.
Анализ существующих языков обработки символьной информации, использование их для реализации интеллектуальных систем, а также сравнение тенденций развития этих языков позволяют сделать несколько замечаний.
1. Можно предположить, что Лисп еще значительное время будет оставаться основным языком для реализации интеллектуальных систем.
2. Уже в ближайшее время можно ожидать появления языков, вобравших в себя лучшие черты Лиспа и др. языков программирования ИИ.
3. Наблюдается явная тенденция к созданию параллельных версий языков для программирования задач ИИ. Языки типа Лисп, Пролог, Рефал (а также всевозможные модификации и «смеси» этих и/или других языков символьной обработки) будут все больше уступать свои позиции на уровне инженеров по знаниям специальным языкам представления знаний, оставаясь инструментарием системных программистов.
На основании анализа сравнительных характеристик для изучения языка Лисп в курсе лабораторных работ по предмету «Системы искуственного интеллекта» был выбран диалект муЛисп. Выбор этого диалекта основан на следующих его особенностях:
1. Простота в изучении (благодаря небольшому набору базовых функций).
2. Близость к стандарту языка.
3. Возможность пополнения базового набора функций.
4. Дополнительные библиотеки Лисп-функций, расширяющие базовый набор функций, имеющимися в диалектах Коммон Лисп и Интерлисп, а также библиотеками, позволяющими выполнять манипулирование окнами на экране дисплея и работать с устройством «мышь».
5. Дополнительное программное обеспечение к интерпретатору: интерактивный редактор текстов и простая обучающая система.

1.2 Основные элементы языка ЛИСП

Основу ЛИСПа составляют символьные выражения, которые называются S-выражениями и образуют область определения для функциональных программ.
S-выражение (Simbolic expresion) - основная структура данных в ЛИСПе.
(ДЖОН СМИТ 33 ГОДА)
S-ВЫРАЖЕНИЯ
((МАША 21) (ВАСЯ 24) (ПЕТЯ 1)) /
S-выражение - это либо атом, либо список.
Атомы - это простейшие объекты Лиспа, из которых строятся остальные структуры.
Атомы бывают двух типов - символьные и числовые.
Символьные атомы - последовательность букв и цифр, при этом должен быть по крайней мере один символ отличающий его от числа.
ДЖОН АВ13 В54 10А
Символьный атом или символ - это не идентификатор переменой в обычном языке программирования. Символ как правило обозначает какой либо предмет, объект вещь, действие.
Символьный атом рассматривается как неделимое целое.
К символьным атомам применяется только одна операция: сравнение.
В МCL в состав символа могут входить:
+ - * / @ $ % ^ _ <>
Числовые атомы - обыкновенные числа
124
-344
4.5 3.055Е8
Числа это константы.
Типы чисел зависят от реализации ЛИСПа
Атом - простейшее S-выражение.
В ЛИСПЕ список это последовательность элементов (list). Элементами являются или атомы или списки. Списки заключаются в скобки, элементы списка разделяются пробелами.
(банан) 1 атом
(б а н а н) 5 атомов
(a b (c d) e) 4 элемента
Таким образом список - это многоуровневая или иерархическая структура данных, в которой открывающиеся и закрывающиеся скобки находятся в строгом соответствии.
(+ 2 3) 3 атома
(((((первый) 2) второй) 4) 5) 2 элемента
Список, в котором нет ни одного элемента, называется пустым
списком и обозначается "()" или символом NIL.
NIL - это и список и атом одновременно.
Пустой список играет такую же важную роль в работе со списками, что и ноль в арифметике.
Пустой список может быть элементом других списков.
(NIL) ;список состоящий из атома NIL
(()) ;то же самое, что и (NIL)
((())) ;- " -((NIL))
(NIL ()) ;список из двух других списков
NIL обозначает кроме этого, в логических выражениях
логическую константу "ложь" (false).
Логическое "да"(true) задается символом "Т".
Атомы и списки - это символьные выражения или S-выражения. Соотношение рассмотренных основных типов ЛИСПА поясняет диаграмма, в приложении А.

2 Особенности диалектов языка Лисп

2.1 Диалекты Лиспа

Маклисп.
Кроме символьной обработки Маклисп широко использовался в традиционных числовых вычислениях, применяемых , например, в обработке речи и изображений. Кроме исследователей ИИ и разработчиков алгебраической системы Максима на Маклисп оказали влияние и работы групп в МИТ по робототехнике, обработке речи и изображений. Исходя из требований, предъявляемых этими областями, в Маклисп были включены новые математические типы данных, такие как матричная и битовая обработка, а также широкий набор арифметических функций и средств. Быть может, важнейшая из них - возможность вычислений с неограниченной точностью, основывающаяся на созданных Кнутом (1969) алгоритмах [2].
Маклисп был также первой Лисп-системой для которой создан хороший транслятор. Транслятор генерирует машинную программу в форме списков. Машинный код в виде списка легко обрабатывать и результирующий код для числовых задач получался эффективнее, чем у лучших фортрановских трансляторов.
Однако большую часть своих свойств Маклисп приобрел под влиянием стоящих перед исследователями ИИ проблем и накопленного опыта. Так в язык попали макросы чтения и таблицы чтения, позволяющие легко изменять и расширять структуру языка. Таким же образом из требований к программам и окружению возникли управляющие структуры, механизмы обработки прерываний и ошибок, а также использование управляющих символов, создан и интегрирован в систему экранный редактор, появились управление и взаимодействие параллельных процессов.
Основное внимание разработчики Маклиспа сосредоточили на эффективности. Этому служат указания, уточняющие способы обработки аргументов функций, а также экранирование от вмешательства программиста внутренних механизмов системы. За счет этих мер скорость работы Маклиспа в 1.5-2.5 раза выше, чем Интерлисп.
Всего в Маклиспе используется около 400 функций. Самым большим недостатком системы является то, что ее никогда не документировали должным образом. Документация по этой системе разбросана по различным отчетам и руководствам. Маклисп был исследовательской системой и не предназначался для обучения и промышленного использования [2].
муЛисп.
Интерпретатор Мулисп-85, разработанный для ПЭВМ серии IBM PC - удачный вариант реализации диалекта языка, включающий сравнительно ограниченный набор базовых функций (около 260) и оказавшийся в следствие этого более простым для изучения.
По сравнению с Коммон Лиспом диалект муЛисп не имеет такого широкого спектра доступных типов данных. В нем обеспечивается работа только с двумя типами числовой информации: целыми числами с любым основанием и рациональными. В диалекте отсутствуют средства работы со структурами, массивами, потоками и другими типами данных, указанная реализация языка Лисп имеет одно существенное преимущество - возможность пополнения базового набора функций путем подключения подпрограмм, написанных на языке ассемблера, что позволило повысить гибкость использования интерпретатора и эффективность прикладного программного обеспечения, создаваемого на его основе. Возможность такого пополнения отсутствует в большинстве других Лисп-систем, являющихся в этом смысле замкнутыми программными продуктами.
Среди других, вероятно, менее существенных, особенностей системы можно указать на реализацию специального механизма, позволяющего не заботиться о присваивании начальных значений литеральным атомам, получающих изначальное значение, равное «печатному» имени самого атома. Еще одной особенностью диалекта является возможность использования новой синтаксической конструкции «встроенный COND», существенно сокращающей тексты описаний функций пользователя и применяемой при записи тел функций и лямбда-выражений.[7]
Набор базовых функций муЛисп-интерпретатора включает ряд функций, обеспечивающих доступ практически ко всем функциям ОС ЭВМ через соответствующие прерывания. Наконец, указанная Лисп-сис-тема обеспечивается библиотеками Лисп-функций, дополняющими базовый набор функциями, имеющимися в диалектах Коммон Лисп и Интерлисп, что облегчает решение проблемы переносимости исходных текстов программных модулей, а также библиотеками, позволяющими выполнять манипулирование окнами на экране дисплея и обрабатывать управляющие воздействия через устройство типа «мышь». В комплект дополнительного программного обеспечения к интерпретатору входят интерактивный редактор текстов и простая обучающая система, написанные на диалекте языка муЛисп [7].
Интерлисп.
Интерлисп появился в 1972 году из ББН-Лиспа. К 1978 году, когда вышло описание Интерлиспа, язык и система уже достаточно стабилизировались. Интерлисп уже не был языком в том же смысле, что и Маклисп или другие Лисп- системы или обычные традиционные системы программирования. Он представлял собой интегрированную среду программирования, в которую вошло множество различных вспомогательных средств. Интерлисп стал классическим примером хорошо развитых программных средств и средств в системах разделения времени [2].
Этот диалект наряду с Коммон Лиспом один из наиболее распространенных, имеет достаточно развитый аппарат представления и манипулирования различными структурами данных, включая массивы. Среди общих особенностей данного варианта языка следует отметить использование для обозначения встроенных функций нетрадиционных имен, что порой затрудняет перенос готовых программных продуктов на другие диалекты и другие ЭВМ [7].
В 1974 году Xerox начала разработку для Интерлиспа персональной лисповской рабочей станции под названием Alto. В реализации Лиспа для Alto впервые применили спроектированную специально для языка Лисп микропрограммируемую систему команд и мини-ЭВМ, способную с более высокой производительностью, чем универсальные ЭВМ, интерпретировать лисповские программы. Из этой машины Alto впоследствии развились Лисп-машины серии 1100 фирмы Xerox.
На основе версии Интерлиспа, работавшей в системе разделения времени, была создана совместимая снизу вверх версия Лиспа Интерлисп-де, используемая на Лисп-машинах серии 1100. В ее пользовательский интерфейс входили многооконное взаимодействие, графика с высокой разрешающей способностью, средства выбора из меню и мышь, а также ориентированный на использование экрана инспектор структур данных. Идея разделения экрана на многие независимые окна родилась в XLG. Алан Кэй уже в конце 60-х годов предложил такую идею подхода к компьютерам будущего и интерфейсу между человеком и машиной. Работа XLG привела к созданию в 70-х годах к разработке языка программирования Smolltalk и объектного программирования.
При создании Интерлиспа работа велась весьма тщательно. Система хорошо документирована и более новые версии совместимы с более ранними. Так преимуществом системы стало непрерывно пополняющееся большое количество переносимого программного обеспечения. С другой стороны, ограничение системы старым зафиксированным уже в конце 70-х годов диалектом сделало систему отчасти устаревшей и трудно расширяемой. В Интерлиспе среди прочего отсутствуют иерархические типы данных, объекты и замыкания. К тому же он базируется на динамическом связывании, тогда как новые версии Лиспа - статические. Однако из Интерлиспа берет начало новая версия - Коммон Лисп (1986). Для программирования на более высоком уровне в Интерлисп разработаны такие средства, в которых уже присутствовали объекты.
Интерлисп - столь замкнутая система, что доступна только ее оттранслированная версия в машинных кодах. В некоторых других системах, таких как, например Зеталисп, поддерживается версия Лиспа на исходном языке, которая доступна пользователю и может модифицироваться им. Развитие закрытых систем, похожих на Интерлисп, связано с ресурсами, имеющимся у создавших их лабораторий.
Интерлисп использует свыше 500 функций и большое количество системных имен и флажков, с помощью которых можно настроить и подогнать систему. Интерлисп реализован в системе разделения времени на многих больших ЭВМ.
В Интерлиспе основное внимание было уделено удобству системы для пользователя. Главный принцип разработчиков этого диалекта: все, что может иметь место в системе, должно естественно выражаться в терминах ее входного языка. Поэтому в Интерлисп программисту доступно все. Он может переопределять любые, в том числе и встроенные, функции; задавать и переопределять реакции на ошибки; работать непосредственно с уровня входного языка с внутренними структурами интерпретатора и т. д. При этом система поддерживает свою целостность и работоспособность [7].
Франс Лисп.
Маклисп стал основой для многих новых диалектов языка Лисп, первым из которых был Франс Лисп. Эта версия Лиспа названа в честь известного венгерского композитора. Главным мотивом разработки Франс Лисп было желание получить современную Лисп-систему для новых машин VAX, чтобы на них можно было использовать систему Максима и другое лисповское программное обеспечение. Франс Лисп в довольно большой степени напоминает Маклисп, на котором первоначально была реализована Максима. Однако в диалекте отсутствуют некоторые устаревшие особенности Маклиспа и содержатся более новые системные идеи, заимствованные в то время в MIT Лисп-машин для Зеталиспа.
Новый диалект был реализован в университете в Беркли на ЭВМ VAX 780/11 на языке Си под управлением системы UNIX. Франс Лисп довольно широко используется как под управлением UNIX, так и под управлением VAX/VMS и в настоящее время является наиболее часто используемой версией Лиспа для систем разделения времени. Кроме того, он широко используется и на 32-битовых микро-ЭВМ и рабочих станциях, работающих под управлением UNIX.
Благодаря своей хорошей переносимости Франс Лисп получил распространение во многих университетах и исследовательских учреждениях. Сопровождение системы также разошлось в различных исправлениях системных ошибок, реализациях наиболее эффективных алгоритмов, а также в расширениях языка.
Зеталисп Лисп-машин.
Зеталисп также опирается на Маклисп. Он создан в 70-е годы в MIT в рамках проекта Лисп-машины, финансированного оборонным агентством. С самого начала его целью было изготовление коммерческого продукта. В 1979 году в связи с проектом родились два предприятия изготавливающие Лисп-машины: Symbolic Inc. и Lisp Machine Inc. (LMI). После этого в 80-е годы работа по развитию Зета Лиспа продолжалась в них независимо друг от друга на коммерческой основе. В какой-то мере системы отличаются друг от друга, но в части Зета Лиспа машины почти совместимы [2].
Зета Лисп содержит следующие развитые механизмы и черты:
- широкий выбор типов данных;
- возможность объектно-ориентированного программирования в системе Flavor;
- современные управляющие структуры, динамические механизмы передачи управления сопрограммы и процессы;
- гибкий механизм ключевых слов в лямбда-списке и многозначные функции;
- ввод и вывод основывающийся на потоках;
- пространства имен;
- уже готовые функции, в том числе для сортировки, работы с линейными управлениями и матричные вычисления.
Выбор используемых в среде Зеталиспа инструментов и языков программирования зависит от поставщика, причем предлагаемый набор средств все время расширяется. Среди других языков предлагаются Фортран, Паскаль, Ада и Пролог. Для этих языков в среде Зеталиспа существуют особенно развитые программные окружения, и разработанные в них программы можно выполнять вместе с программами на Лиспе.
Готовые инструменты и прикладные разработки в большом количестве имеются для работы с ЭС, с естественным языком и речью, с реляционными базами данных, машинной графики и машинного проектирования [2].
Коммон Лисп.
Этот диалект отличается наиболее широким представлением различных структур данных и включает около 800 встроенных функций. В этом диалекте обеспечиваются средства обработки основных классов числовой информации: целых, вещественных и комплексных. Символьные данные (литеры, литеральные атомы, строки) в Коммон Лиспе соответствуют основным возможностям других Лисп-систем. Дополнительно имеются средства обработки непечатных литер в символьных именах.
Одним из существенных преимуществ диалекта Коммон Лисп является наличие средств обработки массивов и структур, по своим возможностям не уступающих соответствующим средствам традиционных языков программирования (Фортран, Паскаль). Массивы в Коммон Лиспе могут иметь любое неотрицательное число измерений и индексируются последовательностью целых чисел. Тип компонентов массива может быть произвольным. Выделяется подкласс векторов - одномерных массивов, среди которых отдельно рассматриваются строки и битовые массивы.
Структуры Коммон Лиспа являются типом многокомпонентных записей, определяемых пользователем и имеющих именованные компоненты. Встроенное макроопределение DEFSTRUCT используется для определения структур новых типов. Для создания данных нового типа в виде структуры предусмотрены средства автоматической генерации набора функций, обеспечивающих средства манипулирования объектами этого класса [1].
Удобным средством контроля доступа к различным переменным и функциям Лисп-программ в Коммон-Лиспе являются пакеты. Пакет - множество имен объектов, определенных и доступных в нем. Внутри пакета имена объектов подразделяются на внутренние и внешние. Первые предназначены для использования только внутри данного пакета, а вторые - для обеспечения связи с другими пакетами. Лисп-интерпретатор представляет широкий спектр средств манипулирования с пакетами. Как правило, Лисп-система имеет в своем составе четыре стандартных пакета: lisp (содержащий примитивы системы), user (умалчиваемый пакет прикладных программ и данных пользователя), keyword (содержащий ключевые слова всех встроенных функций и функций, определяемых пользователем), system (зарезервированный для системных целей).
Значительной переработке и расширению в Коммон Лиспе подверглись средства ввода-вывода и передачи информации. Для эффективной организации различных обменов с внешней средой введена концепция потоков, позволяющих осуществлять одно- и (или) двухстороннюю передачу информации. Для потоков предусмотрен набор базовых функций. В диалекте различают символьные и двоичные потоки. В первом случае передача осуществляется по байтам, а во втором - целыми числами. Кроме стандартных потоков пользователь имеет возможность создавать и использовать собственные потоки [2].
В дополнение к указанным типам данных Коммон Лисп имеет ряд специфических классов объектов: хэш-таблицы, обеспечивающие эффективный способ доступа к данным по ключу; READ-таблицы, обеспечивающие управление обработкой информации поступающей из входного потока Лисп-системы, и некоторые другие. Такое множество имеющихся в диалекте различных типов данных, с одной стороны, развеивает существующее ошибочное представление о языке Лисп как о средстве обработки только символьной информации, а с другой - наличие мощных средств манипулирования типами данных существенно усложняет его [7].
Этот диалект оставлен открыт: принципиальным является то, что осталась возможность в будущем, когда подойдет время и будет достигнуто согласие, добавить новые средства и методы. Эта идея как раз соответствует духу Лиспа.
Коммон Лисп не является готовой программной системой в том же смысле, что и Интерлисп, поскольку вопросы среды в основном оставлены открытыми. В стандарте не определено, каким должен быть редактор или другие вспомогательные средства. Сказано лишь в самом общем виде, каким образом они вызываются. Для того чтобы обеспечить быстрое развитие, среда и инструментальные средства еще не затронуты стандартизацией, и поэтому есть возможность создавать различные среды для различных целей. Коммон Лисп не определяет также и интерфейс пользователя.
В Коммон Лисп на современном этапе не включены даже средства объектного программирования, хотя и определены необходимые для этого базовые механизмы (замыкание и др.). Таким образом, объекты можно реализовать на Лиспе. Но уже ведется работа по стандартизации средств и форм объектного программирования.
В Коммон Лиспе много внимания уделено практическим требованиям, и, вероятно, поэтому не все его черты эстетичны и чисты. Несомненно, что и другие Лисп-системы будут использоваться в дальнейшем, и их также необходимо развивать.
Коммон Лисп предназначен не только для работы со списками или для символьной обработки, он является универсальным языком программирования, включающим в себя особенно хорошие средства для численных вычислений, управления данными и связи. На Коммон Лиспе можно с одинаковым успехом писать программы в традиционных операторном, процедурном, фразовом стиле, а также и в свойственных Лиспу стилях. В языке содержатся предпосылки для использования различных способов и стилей программирования, таких как операторное, функциональное, макропрограммирование, программирование, управляемое данными, и продукционное программирование, а также средства, необходимые для логического и объектного программирования и реализации других средств более высокого уровня [1].
Можно смело сказать, что Коммон Лисп содержит почти все, что на сегодняшний день могут дать другие известные языки программирования, и, кроме того, он предусматривает средства для расширения языка.
2.2 Лисп-машины

С наступлением 70-х годов большие системы ИИ и алгебраические системы натолкнулись на ограничения памяти и эффективности, существующие и на больших универсальных ЭВМ. Восемнадцатибитовое поле адреса широко используемых машин PDP-10/20 стало серьезным ограничением, к тому же исследователи ИИ не могли работать в системе разделения времени в дневное время из-за большой нагрузки на машины. Из этих проблем родилась идея об отдельной Лисп-машине и о маневре, который известен под названием «бегство из разделения времени». На это направление повлияло также и быстрое развитие микро-электронники в 70-х годах, сделавшее возможным проектирование и производство ориентированных на язык процессоров и персональных ЭВМ.
Первый отчет, связанный с Лисп-машинами, появился в серии изданий лаборатории ИИ MIT в 1974 году, а интегральная схема LSI была изготовлена в 1978 году. Первые промышленные Лисп-машины появились на рынке несколько лет спустя.
Часть идей, касающихся Лисп-машин, зародилась в Исследовательском центре Palo Alto фирмы Xerox и была результатом пионерских разработок в области обработки данных на персональных ЭВМ и экранно-ориентированных человеко-машинных интерфейсов. Это были объектно-ориентированный подход, а также специальные интегрированные в среду средства и методы программирования, созданные фирмами Xerox и BBN в ходе работы над Интерлиспом [2].
Целью проектирования Лисп-машин была разработка их в виде персональных ЭВМ, которые можно было бы использовать не только для профессиональных исследований в области ИИ, но и для различных промышленных и коммерческих приложений. Разработке и их распространению помешала необходимость переноса программного обеспечения большого объема из дорогой среды больших машин.
По производительности оборудования Лисп-машины очень эффективны, кроме того, они имеют большой объем основной памяти. Их аппаратура спроектирована специально для вычислений на Лиспе. С точки зрения эффективности одной из наиболее важных особенностей является проверка типов на уровне аппаратуры, используемая в системах, происходящих из MIT.
Однако наиболее существенным преимуществом такой аппаратуры является возможность использования на Лисп-машине интегрированной программной среды. В ней наряду с самим Лиспом содержатся разнообразные программные средства. Программное обеспечение использует тысячи функций. Во многих системах помимо Лиспа доступны и другие языки (Паскаль, Ада, Си, Пролог и др.). Так, в систему можно добавить реализованные ранее на других языках части или сделать традиционное программирование более эффективным с помощью разнообразнейших средств, имеющихся на Лисп-машине.
Создание Лисп-машин дало новый толчок развитию Лиспа. Кроме высокого быстродействия (первая же Лисп-машина работала в несколько раз быстрее, чем Маклисп) и огромной виртуальной списковой памяти, достоинством Лисп-машин является и то, что для них это единственный язык программирования. На нем написаны все системные программы, начиная с ОС и кончая всевозможными препроцессорами, и программы пользователя. Такая однородность значительно упрощает как разработку самих системных компонентов, так и взаимодействие с ними. По сути дела, на Лисп-машинах стирается грань между системным и прикладным программным обеспечением. В настоящее время Лисп-машины выпускаются рядом фирм США, Японии и Западной Европы. В бывших социалистических странах также имеются положительные примеры разработки таких машин [7].

Заключение

Язык Лисп был разработан в Стэнфорде под руководством Дж. Маккарти в начале 60-х годов. По первоначальным замыслам он должен был0 включать наряду со всеми возможностями Фортрана средства работы с матрицами, указателями и структурами из указателей и т. п. Но для такого проекта не хватило средств. Окончательно сформированные принципы положенные в основу языка Лисп: использование единого спискового представления для программ и данных; применение выражений для определения функций; скобочный синтаксис языка.[4]
Лисп является языком низкого уровня, его можно рассматривать как ассемблер, ориентированный на работу со списковыми структурами. Поэтому на протяжении всего существования языка было много попыток его усовершенствования за счет введения дополнительных базисных примитивов и управляющих структур. Но все эти изменения , как правило, не становились самостоятельными языками. В новых своих редакциях Лисп быстро усваивал все ценные изобретения своих конкурентов [2]
После создания в начале 70-х годов мощных Лисп-систем Маклисп Интерлисп попытки создания языков ИИ, отличных от Лиспа, но на той же основе, сходят на нет. Дальнейшее развитие языка идет, с одной стороны, по пути его стандартизации (Стандарт-Лисп, Франц-Лисп, Коммон Лисп), а с другой - в направлении создания концептуально новых языков для представления и манипулирования знаниями в Лисп среде. В настоящее время Лисп реализован на всех классах ЭВМ, начиная с ПЭВМ и кончая высоко производительными вычислительными системами.
Лиспу уже больше сорока лет (причем язык имеет некоторые недостатки, в том числе связанные с необходимостью использования большого количества скобок, а также с наличием нескольких диалектов), он остается популярным на всех этапах создания систем искусственного интеллекта и вообще решения сложных логических задач.
В основу языка положен серьезный математический аппарат:
• лямбда-исчисление Черча
• алгебра списочных структур
• теория рекурсивных функций
Долгое время язык использовался узким кругом исследователей. Широкое распространение язык получил в конце 70-х - начале 80-х годов с появлением необходимой мощности вычислительных машин и соответствующего круга задач. В настоящем - Лисп одно из главных инструментальных средств систем искусственного интеллекта. Он принят как один из двух основных ЯП для министерства обороны США и постепенно вытесняет второй ЯП - АДА.
По производительности оборудования Лисп-машины очень эффективны, кроме того, они имеют большой объем основной памяти. Их аппаратура спроектирована специально для вычислений на Лиспе. С точки зрения эффективности одной из наиболее важных особенностей является проверка типов на уровне аппаратуры, используемая в системах, происходящих из MIT.
Однако наиболее существенным преимуществом такой аппаратуры является возможность использования на Лисп-машине интегрированной программной среды. В ней наряду с самим Лиспом содержатся разнообразные программные средства. Программное обеспечение использует тысячи функций. Во многих системах помимо Лиспа доступны и другие языки (Паскаль, Ада, Си, Пролог и др.). Так, в систему можно добавить реализованные ранее на других языках части или сделать традиционное программирование более эффективным с помощью разнообразнейших средств, имеющихся на Лисп-машине.
Лисп - не единственный язык, используемый для задач ИИ. Уже в середине 60-х годов разрабатывались языки, предлагающие другие концептуальные основы. Наиболее важные из них в области обработки символьной информации - СНОБОЛ и Рефал.

Глоссарий

№ п/п Новое понятие Содержание
1 2 3
1 Имена (идентификаторы) последовательность символов для обозначения объектов программы.
2 Символьные атомы последовательность букв и цифр, при этом должен быть по крайней мере один символ отличающий его от числа.
3 Оператор элемент языка, который задает полное описание некоторого действия, которое необходимо выполнить. Оператор - это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка программирования и определяет некоторый вполне законченный этап обработки данных. В состав операторов входят ключевые слова; данные; выражения и т.д.
4 Стандартная функция подпрограмма, заранее встроенная в транслятор языка для вычисления часто употребляемых функций. В качестве аргументов функций можно использовать константы, переменные и выражения.
5 Программа последовательность инструкций, предназначенных для выполнения компьютером.
6 Программирование теоретическая и практическая деятельность решения задачи средствами конкретного языка программирования и оформления полученных результатов в виде программы.
7 Ключевые слова слова языка, имеющие строго определенное назначение, которые не могут использоваться в качестве идентификаторов.
8 Интерлисп столь замкнутая система, что доступна только ее оттранслированная версия в машинных кодах. В некоторых других системах, таких как, например Зеталисп, поддерживается версия Лиспа на исходном языке, которая доступна пользователю и может модифицироваться им. Развитие закрытых систем, похожих на Интерлисп, связано с ресурсами, имеющимся у создавших их лабораторий.
9 Константы данные, которые зафиксированы в тексте программы и не изменяются в процессе ее выполнения.
10 Переменные данные, которые могут изменять свои значения в ходе выполнения программы. Они обозначаются именами. Переменные бывают целые, вещественные, логические, символьные и строковые.
11 Массивы последовательности однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами - одним в случае одномерного массива, или несколькими, если массив многомерный.
12 Выражения элементы языка, которые предназначаются для выполнения необходимых вычислений, состоят из констант, переменных, указателей функций, объединенных знаками операций.

Список использованных источников

1. Me Carthy 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. – ISBN 5-186-02761-4.
2. Аппаратные средства IBM PC. Энциклопедия, 2-е изд. СПб:. 2002. – ISBN 4-276-25366-2.
3. Архитектура ПК, комплектующие, мультимедиа. - Рудометов Е., Рудометов В. – Питер, 2004. – ISBN 5-286-02834-3.
4. Гейн А.Г., Сенокосов А.И. Информатика. - М.: Дрофа, 2003. – ISBN 3-346-576571-2.
5. Гусева А.И. Работа в локальных сетях NetWare 3.12-4.1.- Учебник. – М.:Диалог – МИФИ, 2001. – ISBN 5-246-35346-5.
6. Джон Д.Рули, Дэвид Мэсвин, Томас Хендерсон, Мартин Хеллер. Сети Windows NT 4.0. – BHV – Киев, 2006. – ISBN 4-375-32543-3.
7. Еремина. М.: Финансы и статистика, 2001. – ISBN 5-246-02834-5.
8. Кузнецов А.А. и др. Основы информатики. - М.: Дрофа, 2005. – ISBN 3-346-043541-5.
9. Кушниренко А.Г. и др. Информатика. - М.: Дрофа, 2001. – ISBN 5-246-25876-2.
10. Лебедев Г.В., Кушниренко А.Г. 12 лекций по преподаванию курса информатики. - М.: Дрофа, 2005. – ISBN 5-245-05643-5.
11. Михаил Гук. Сети NetWare 3,12-4.1 книга ответов. – СП: Питер, 1996. – ISBN 5-256-27853-5.
12. Нанс Б. Компьютерные сети. – М.: БИНОМ, 2000. – ISBN 5- 234-2454-5.
13. Фигурнов В.Э. IBM PC для пользователя краткий курс. – М. Инфра М, 2004. – ISBN 5-246-02834-5.
14. Холмс Г.Л. Языки программирования: Пер. с англ. М.: Радио и связь, 1985. – ISBN 3-346-576571-2.
15. Язык компьютера: Пер. с англ. М.: Мир, 1989. – ISBN 5-300-02821-5.
Приложение A

Соотношение рассмотренных основных типов ЛИСПА


Скачиваний: 1
Просмотров: 4
Скачать реферат Заказать реферат