Особенности языка ЛИСП

Автор: Пользователь скрыл имя, 06 Марта 2013 в 14:17, курсовая работа

Краткое описание

Язык Лисп был pазpаботан в Cтэнфорде под pуководством Дж. Маккарти в начале 60-х гoдов. Пo первоначальным замыслам oн должен был включать наряду со всеми возможностями Фортрана средства работы с матрицами, указателями и структурами из указателей и т. п. Но для такого проекта не хватило средств. Oкончательно cформированные пpинципы, пoложенные в oснову языка Лисп: использование единого спискового представления для программ и данных; применение выражений для определения функций; скобочный синтаксис языка.

Оглавление

Введение
1. Язык программирования ЛИСП
1.1 Основные функции языка Лисп
1.2 Арифметические функции
1.3 Логические функции
1.4 Специальные функции
2. Особенности диалектов языка ЛИСП
2.1 MacLISP
2.2 MuLISP
2.3 InterLISP
2.4 CommonLISP
3. Особенности языка ЛИСП
Заключение
Глоссарий
Список использованных источников

Файлы: 1 файл

особенности языка ЛИСП.doc

— 161.50 Кб (Скачать)

После этого функция gensym будет последовательно выдавать атомы S2, S3, S4, ... .

(prog (v1 v2 ... vn) e1 e2 ... ek) (n≥0, k≥1) - Блочная и связанные с  ней функции. Эту функцию называют "блочной", поскольку ее вычисление  напоминает выполнение блоков  в других языках программирования.

Вычисление функции начинается с того, что вводятся локальные переменные vi, перечисленные в ее первом аргументе, и всем им присваивается в качестве начального значения пустой список (). После этого функция последовательно вычисляет остальные свои аргументы - формы ei. Вычислив последнюю из них, функция prog заканчивает работу со значением этой формы, уничтожив при этом свои локальные переменные.

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

В качестве ei может быть записан и атом-идентификатор, в этом случае он не вычисляется, и трактуется как метка, на которую будет производиться переход внутри этого блока (функцией go) [2].

(setq v e) - аналог оператора  присваивания. В качестве аргумента  v должно быть задано имя переменной, существующей в данный момент. Функция присваивает этой переменной  новое значение - значение аргумента  е. Это же значение является  значением и самой функции setq, хотя оно, как правило, не используется.

В функции (pop v1 v2) обоими аргументами должны быть имена переменных, существующих в данный момент, причем переменная v2 должна иметь значение и им должен быть непустой список.

Функция разделяет этот список на две части - на его первый элемент, который присваивается переменной v1, и на его оставшуюся часть (без первого элемента), которая становится новым значением переменной v2.

В качестве второго аргумента  функции (push е v) должно быть задано имя  переменной, в качестве первого - произвольная форма. Функция вычисляет эту форму и строит новый список, первый элемент которого - вычисленное значение, а хвост - список, являющийся значением переменной v. Результирующий список присваивается в качестве нового значения переменной v (он также является значением самой функции push).

(return e) - функция досрочного  выхода из блока, она может  использоваться только внутри  блочной функции prog, поскольку  завершает вычисление ближайшей  объемлющей блочной функции, объявляя ее значением значение аргумента e.

(go e) - функция перехода  по метке. В качестве аргумента  функции go должен быть задан  идентификатор - одна из меток  ближайшей объемлющей блочной  функции. Функция go полностью  завершает вычисление той формы  этой блочной функции, в которую она входит (на любом уровне), и осуществляет переход для вычисления формы, следующей за этой меткой [9, 3].

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

 

2.1 MacLISP

 

Кроме символьной обработки  Маклисп широко использовался в  традиционных числовых вычислениях, применяемых, например, в обработке речи и изображений. Кроме исследователей ИИ и разработчиков алгебраической системы Максима на Маклисп оказали влияние и работы групп в МИТ по робототехнике, обработке речи и изображений. Исходя из требований, предъявляемых этими областями, в Маклисп были включены новые математические типы данных, такие как матричная и битовая обработка, а также широкий набор арифметических функций и средств. Быть может, важнейшая из них - возможность вычислений с неограниченной точностью, основывающаяся на созданных Кнутом (1969) алгоритмах.

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

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

Основное внимание разработчики Маклиспа сосредоточили на эффективности. Этому служат указания, уточняющие способы обработки аргументов функций, а также экранирование от вмешательства программиста внутренних механизмов системы. За счет этих мер скорость работы Маклиспа в 1.5-2.5 раза выше, чем Интерлисп.

Всего в Маклиспе используется около 400 функций. Самым большим недостатком  системы является то, что ее никогда не документировали должным образом. Документация по этой системе разбросана по различным отчетам и руководствам. Маклисп был исследовательской системой и не предназначался для обучения и промышленного использования.

Помимо символьной обработки MacLISP [4] широко использовался в традиционных числовых вычислениях, применяемых, например, в обработке речи и изображений. Кроме исследователей ИИ и разработчиков алгебраической системы Максима на Маклисп оказали влияние и работы групп в МИТ по робототехнике, обработке речи и изображений. Исходя из требований, предъявляемых этими областями, в Маклисп были включены новые математические типы данных, такие как матричная и битовая обработка, а также широкий набор арифметических функций и средств. Быть может, важнейшая из них - возможность вычислений с неограниченной точностью, основывающаяся на созданных Кнутом в 1969 году алгоритмах.

MacLISP был также первой LISP-системой для которой создан хороший транслятор. Транслятор генерирует машинную программу в форме списков. Машинный код в виде списка легко обрабатывать и результирующий код для числовых задач получался эффективнее, чем у лучших трансляторов фортрана.

Однако большую часть своих  свойств MacLISP приобрел под влиянием стоящих перед исследователями ИИ проблем и накопленного опыта. Так в язык попали макросы чтения и таблицы чтения, позволяющие легко изменять и расширять структуру языка. Таким же образом из требований к программам и окружению возникли управляющие структуры, механизмы обработки прерываний и ошибок, а также использование управляющих символов, создан и интегрирован в систему экранный редактор, появились управление и взаимодействие параллельных процессов [5, 4].

 

2.2 MuLISP

 

Интерпретатор Мулисп-85, разработанный для ПЭВМ серии IBM PC - удачный вариант реализации диалекта языка, включающий сравнительно ограниченный набор базовых функций (около 260) и оказавшийся вследствие этого более простым для изучения.

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

Среди других, вероятно, менее существенных, особенностей системы можно указать на реализацию специального механизма, позволяющего не заботиться о присваивании начальных значений литеральным атомам, получающих изначальное значение, равное «печатному» имени самого атома. Еще одной особенностью диалекта является возможность использования новой синтаксической конструкции «встроенный COND», существенно сокращающей тексты описаний функций пользователя и применяемой при записи тел функций и лямбда-выражений.

Набор базовых функций муЛисп-интерпретатора включает ряд функций, обеспечивающих доступ практически ко всем функциям ОС ЭВМ через соответствующие прерывания. Наконец, указанная Лисп-система обеспечивается библиотеками Лисп-функций, дополняющими базовый набор функциями, имеющимися в диалектах Коммон Лисп и Интерлисп, что облегчает решение проблемы переносимости исходных текстов программных модулей, а также библиотеками, позволяющими выполнять манипулирование окнами на экране дисплея и обрабатывать управляющие воздействия через устройство типа «мышь». В комплект дополнительного программного обеспечения к интерпретатору входят интерактивный редактор текстов и простая обучающая система, написанные на диалекте языка муЛисп.

Интерпретатор MuLISP-85, разработанный  для ПЭВМ серии IBM PC -удачный вариант  реализации диалекта языка, включающий сравнительно ограниченный набор базовых функций (около 260) и оказавшийся вследствие этого более простым для изучения [5].

Среди других, вероятно, менее существенных, особенностей системы можно указать  на реализацию специального механизма, позволяющего не заботиться о присваивании начальных значений литеральным атомам, получающих изначальное значение, равное "печатному" имени самого атома. Еще одной особенностью диалекта является возможность использования новой синтаксической конструкции "встроенный COND", существенно сокращающей тексты описаний функций пользователя и применяемой при записи тел функций и лямбда-выражений.

Набор базовых функций MuLISP-интерпретатора включает ряд функций, обеспечивающих доступ практически ко всем функциям ОС ЭВМ через соответствующие прерывания. Наконец, указанная Лисп-сис-тема обеспечивается библиотеками Лисп-функций, дополняющими базовый набор функциями, имеющимися в диалектах CommonLISP и InterLISP, что облегчает решение проблемы переносимости исходных текстов программных модулей, а также библиотеками, позволяющими выполнять манипулирование окнами на экране дисплея и обрабатывать управляющие воздействия через устройство типа "мышь". В комплект дополнительного программного обеспечения к интерпретатору входят интерактивный редактор текстов и простая обучающая система, написанные на диалекте языка MuLISP [10].

 

2.3 InterLISP

 

Интерлисп появился в 1972 году из ББН-Лиспа. К 1978 году, когда вышло описание Интерлиспа, язык и система уже достаточно стабилизировались. Интерлисп уже  не был языком в том же смысле, что и Маклисп или другие Лисп - системы или обычные традиционные системы программирования. Он представлял собой интегрированную среду программирования, в которую вошло множество различных вспомогательных средств. Интерлисп стал классическим примером хорошо развитых программных средств и средств в системах разделения времени.

Этот диалект наряду с CommonLISP один из наиболее распространенных, имеет достаточно развитый аппарат представления и манипулирования различными структурами данных, включая массивы. Среди общих особенностей данного варианта языка следует отметить использование для обозначения встроенных функций нетрадиционных имен, что порой затрудняет перенос готовых программных продуктов на другие диалекты и другие ЭВМ [8].

В 1974 году Xerox начала разработку для InterLISP персональной лисповской рабочей станции под названием Alto. В реализации LISP для Alto впервые применили спроектированную специально для языка LISP и программируемую систему команд и мини-ЭВМ, способную с более высокой производительностью, чем универсальные ЭВМ, интерпретировать программы LISP. Из этой машины Alto впоследствии развились LISP-машины серии 1100 фирмы Xerox.

На основе версии Интерлиспа, работавшей в системе разделения времени, была создана совместимая снизу вверх версия LISP InterLISP-де, используемая на LISP - машинах серии 1100. В ее пользовательский интерфейс входили многооконное взаимодействие, графика с высокой разрешающей способностью, средства выбора из меню и мышь, а также ориентированный на использование экрана инспектор структур данных. Идея разделения экрана на многие независимые окна родилась в XLG. Алан Кэй уже в конце 60-х годов предложил такую идею подхода к компьютерам будущего и интерфейсу между человеком и машиной. Работа XLG привела к созданию в 70-х годах разработки языка программирования Smolltalk и объектного программирования [1].

При создании InterLISP работа велась весьма тщательно. Система хорошо документирована и более новые версии совместимы с более ранними. Так преимуществом системы стало непрерывно пополняющееся большое количество переносимого программного обеспечения. С другой стороны, ограничение системы старым, зафиксированным уже в конце 70-х годов, диалектом сделало систему отчасти устаревшей и трудно расширяемой. В InterLISP среди прочего отсутствуют иерархические типы данных, объекты и замыкания. К тому же он базируется на динамическом связывании, тогда как новые версии LISP - статические. Однако из InterLISP берет начало новая версия - CommonLISP.

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

InterLISP реализован в системе разделения времени на многих больших ЭВМ.

В Интерлиспе основное внимание было уделено удобству системы для пользователя. Главный принцип разработчиков этого диалекта: все, что может иметь место в системе, должно естественно выражаться в терминах ее входного языка. Поэтому в Интерлисп программисту доступно все. Он может переопределять любые, в том числе и встроенные, функции; задавать и переопределять реакции на ошибки; работать непосредственно с уровня входного языка с внутренними структурами интерпретатора и т. д. При этом система поддерживает свою целостность и работоспособность.

 

2.4 CommonLISP

 

Маклисп стал основой  для многих новых диалектов языка  Лисп, первым из которых был Франс  Лисп. Эта версия Лиспа названа  в честь известного венгерского  композитора. Главным мотивом разработки Франс Лисп было желание получить современную Лисп-систему для новых машин VAX, чтобы на них можно было использовать систему Максима и другое лисповское программное обеспечение. Франс Лисп в довольно большой степени напоминает Маклисп, на котором первоначально была реализована Максима. Однако в диалекте отсутствуют некоторые устаревшие особенности Маклиспа и содержатся более новые системные идеи, заимствованные в то время в MIT Лисп-машин для Зеталиспа.

Информация о работе Особенности языка ЛИСП