Сообщение на тему язык программирования лисп

Обновлено: 07.07.2024

Язык Лисп был предложен Дж. Маккарти в работе в 1960 году и ориентирован на разработку программ для решения задач не численного характера. Английское название этого языка – LISP является аббревиатурой выражения LISt Processing (обработка списков) и хорошо подчеркивает основную область его применения. Понятие “список” оказалось очень емким. В виде списков удобно представлять алгебраические выражения, графы, элементы конечных групп, множества, правила вывода и многие другие сложные объекты. Списки являются наиболее гибкой формой представления информации в памяти компьютеров. Неудивительно поэтому, что удобный язык, специально предназначенный для обработки списков, быстро завоевал популярность.

После появления Лиспа различными авторами был предложен целый ряд других алгоритмических языков ориентированных на решение задач в области искусственного интеллекта. Однако это не помешало Лиспу остаться наиболее популярным языком для решения таких задач. На протяжении почти сорокалетней истории его существования появился ряд диалектов этого языка: Common LISP, Mac LISP, Inter LISP, Standard LISP и др. Различия между ними не носят принципиального характера и в основном сводятся к несколько отличающемуся набору встроенных функций и некоторой разнице в форме записи программ. Поэтому программист, научившийся работать на одном из них, без труда сможет освоить и любой другой.

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

Язык программирования Лисп предназначен в первую очередь для обработки символьной информации. Поэтому естественно, что в мире Лиспа числа играют далеко не главную роль. Основные типы данных в Лиспе называются “атом” и “точечная пара”.

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

Ведь Бог писал на Лиспе
Когда заполнил листья зелёным.
Фрактальные цветки и рекурсивные корни:
Самый красивый хак из виденных мною.
А когда я изучаю снежинки,
И не нахожу двух одинаковых,
Я знаю, что Бог любит язык
Со своим собственным четырёхбуквенным названием.

Как Лисп дошёл до жизни такой?



Обложка журнала Byte, август 1979

Теория А: аксиоматический язык

Маккарти считал, что будет полезно иметь алгебраические выражения в языке, похожем на Фортран. Поэтому IPL ему не нравился. Но он подумал, что символические списки – неплохой способ моделировать задачи из области ИИ, в особенности те, что включают в себя дедукцию. Это был зародыш желания Маккарти создать язык алгебраической обработки списков, язык, который напоминал бы Фортран, но мог бы и обрабатывать символические списки, как IPL.

Теория Б: машина будущего

Некоторое время казалось, что Лисп-машины будут волной будущего. Появилось несколько компаний, начавших состязаться за коммерциализацию этой технологии. Наиболее успешной из них стала Symbolics, созданная ветеранами MIT AI Lab. В 1980-х Symbolics выпустила линейку компьютеров из серии 3600, популярных в области ИИ и в индустриях, где требовались вычисления высокой мощности. В линейке 3600 были компьютеры с большими экранами, растровая графика, интерфейс, использовавший мышь, мощные программы для графики и анимации. Это были впечатляющие машины, позволявшие писать впечатляющие программы. К примеру, Боб Кали, работавший в области исследования робототехники, написал мне через твиттер, что ему удалось реализовать и визуализировать алгоритм поиска пути на Symbolics 3650 в 1985. Он рассказал, что растровая графика и ООП (доступное на Лисп-машинах благодаря расширению Flavors) были новинками в 1980-х. Symbolics находилась на переднем крае.


Я спросил Пола Макджонса, много сделавшего для сохранения Лиспа в Музее компьютерной истории в Маунтин-Вью, о том, когда люди впервые начали говорить о Лиспе, как о даре существ из высшего измерения. Он сказал, что этому, безусловно, способствовали свойства самого языка, но ещё и близкая связь Лиспа и мощных приложений в области ИИ в 1960-х и 1970-х. Когда Лисп-машины стало возможным приобрести в 1980-х, с мощностью Лиспа познакомилось ещё несколько человек, находившихся вне таких мест, как MIT или Стэнфорд, и легенда продолжила расти. Сегодня Лисп-машины и Symbolics мало кто помнит, но они помогали поддерживать ауру загадочности Лиспа вплоть до 1980-х.

Теория В: обучение программированию


Что тут вообще происходит? Почему у стола нога животного? Почему женщина показывает на стол? В чём значимость чернильницы? Должны ли мы понять, что волшебник раскрыл тайные знания вселенной, и что они состоят из цикла eval/apply и лямбда-исчисления? Видимо, так и есть. Только это изображение должно было многое добавить к сегодняшнему восприятию Лиспа.

И не сказать, что книга плохая. Она чудесная. В ней обсуждаются важные концепции программирования на уровне более высоком, чем во всех других прочитанных мною книгах, концепции, о которых я давно задумывался, но не мог описать. Удивительно, что учебник по введению в программирование так быстро может перейти к описанию фундаментальных недостатков ООП и преимуществах функциональных языков, минимизирующих изменяемое состояние. Удивительно, как это превращается в обсуждение того, как потоковая парадигма, наверно, что-то вроде сегодняшней RxJS, может дать вам лучшее обоих подходов. SICP выделяет самую суть разработки высокоуровневых программ способом, напоминающим исходную работу Маккарти по Лиспу. Первое, что вам хочется сделать, прочтя эту книгу – заставить прочесть её ваших друзей-программистов; если они её найдут, увидят обложку, и не станут читать, то всё, что у них отложится – это то, что некая загадочная штука по имени eval/apply даёт волшебникам особую власть над столами с ногами животных. Меня бы ещё впечатлила их обувь.

Возвращение Лиспа

В год выхода SICP Бьёрн Страуструп опубликовал первое издание книги "Язык программирования C++", принёсшей ООП в массы. Несколько лет спустя рынок Лисп-машин рухнул, и началась зима ИИ. За последовавшие десять с чем-то лет C++ и потом Java стали языками будущего, а Лисп прозябал.

Естественно, невозможно указать, когда точно люди стали снова восхищаться Лиспом. Возможно, это произошло после того, как Пол Грэм, сооснователь Y-Combinator и создатель Hacker News, опубликовал несколько влиятельных эссе, где описывал Лисп, как лучший язык для стартапов. В эссе "Опережая средних" Грэхем утверждал, что макросы Лиспа сделали язык сильнее других языков. Он заявил, что использование Лиспа в своём стартапе Viaweb помогло ему разработать определённые вещи быстрее, чем это смогли сделать конкуренты. Некоторых программистов это убедило. Но большинство не переключилось на Лисп.


Lisp является аббревиатурой для LISt Processing Language — основным списком в структуре языка. Эти семейные языки позволяют специалистам записывать программы, которые работают быстрее, чем на других языках. Язык программирования Лисп и его диалекты такие как Common, Scheme и Clojure, способствуют созданию мощного и гибкого программного обеспечения, необходимого для сложных и быстро развивающихся областей науки и техники.

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

История

История семейных языков LISP

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

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

Еще один ранний диалект - Lisp-Scheme — сохранился до наших дней, является стандартизированным и широко используемым языком для программирования с нуля. Хотя он похож на Лисп, но отличается от него некоторыми элементами, которые позволяют рассматривать его как отдельный язык.

Ключевые моменты программирования

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

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

Базовая концепция

Базовая концепция программирования

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

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

Интерактивность и гибкость

Интерактивность и гибкость языка

Скорость языков Lisp обычно эквивалентна интерпретируемым языкам. Это также является источником старого мифа о том, что если он интерпретируется, то, следовательно, должен быть медленным, однако это не так. Компиляторы для Лисп существуют с 1959 года, и теперь все основные реализации Common Лисп могут быть скомпилированы непосредственно с машинным кодом, который часто совпадает с кодом C. Например, CL—PPCRE библиотека выражений, написанная в Common Лисп, работает быстрее, чем движок регулярного выражения Perl на некоторых тестах в C, а обучение Lisp намного проще.

Программисты, которые используют интерпретируемые языки, такие как Python или Perl, для удобства и гибкости должны прибегать к написанию на C /C ++ для критически важных частей своего кода и имеют для этого уникальные возможности. Это было показано с прямым бенчмаркингом со стороны создателя языка программирования R, Росса Ихаки, который предоставил тесты, демонстрирующие, что необязательное объявление типа Lisp и компилятор машинного кода позволяют использовать их в 380 раз быстрее, чем R, и в 150 раз быстрее Python.

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

Оценка специальных форм и макросов

Если первым символом в списке, подлежащем оценке, является имя специальной формы или макроса, так как интерпретатор не оценивает аргументы. Однако специальная форма или макрос могут оценивать некоторые из аргументов, как это обрабатывается, варьируется в специальной форме макроса. Например, специальная форма setq оценивает второй аргумент, но не первый. Пример: рассмотрим вторую строку следующего фрагмента кода: (setq a 1) (setq a (+ 2 3)).

Так как специальная форма setq оценивает свой второй аргумент, форма (+ 2 3) оценивается, получая 5. Однако форма не оценена как 5, а назначена. Если setq была функцией или специальной формой, которая оценивала оба аргумента, операция означала бы, что 5 должно быть равно 1, что, очевидно, абсурдная операция!

Некоторые формы и функции

Некоторые формы и функции

Ниже перечислены лишь некоторые из специальных форм, макросов и lisp-функции. Некоторые специальные формы и макросы Quote являются специальной формой, которая просто передает свой неоценимый аргумент. Например, значение (quote a) символа a. Для удобства считается, что выражение формы anything эквивалентно (quote anything).

Setq - это специальная форма, которая оценивает свой второй аргумент, а затем присваивает значение переменной, названной ее аргументом.

Let является специальной формой, которая создает лексические переменные. Она имеет следующую базовую форму: (let ( <( переменное выражение )>*) < form >*). Формы оцениваются в контексте, в котором каждая из переменных является лексической переменной, связанной с указанным начальным значением. Все выражения вычисляются до того, как какая-либо из переменных привязана, поэтому выражение не может использовать ранее объявленную переменную let.

If является специальной формой, которая выбирает одно из двух выражений для оценки на основе результата какого-либо теста, причем его значение становится значением всего выражения. Это аналогично условному выражению языков C-семейства. Две формы должны быть одиночными s-выражениями, однако progn можно использовать для группировки нескольких форм (аналогично < . >Java), хотя это, конечно, не чисто функциональный стиль.

Форма else может быть опущена, в этом случае, если тест ложный, результат будет nil. Cond - это макрос, который выбирает одну серию выражений из нескольких для оценки. Он имеет следующую базовую форму (cond <( test

*)> *). Каждый тест оценивается поочередно, пока не будет возвращен какой-либо результат, кроме nil - в этот момент будет оценена следующая форма. Значение последней оцениваемой формы становится значением cond.

And — макрос с любым количеством аргументов, которые обычно являются всеми тестами - true.

Or — макрос с любым количеством аргументов, прекращается оценка аргументов, как только происходит истинное (не ноль).

Defun - макрос для определения названных функций. Основной синтаксис (defun name ( < parameter >*) < form >*).

Lambda — макрос для определения анонимных функций.

Операции со списками

Операции со списками

Функциональные языки программирования Лисп означают, что аргументы оцениваются до выполнения операции cons- 2 аргумента любого типа. Создает пунктирную пару (cons cell), состоящую из 2 аргументов:

  • (cons 'a 3) - это (a . 3) car- 1 аргумент, который должен быть истинным или пунктирным списком. Извлекает car первой ячейки списка.
  • (car '(a 3)) - это a. cdr- 1 аргумент, который должен быть истинным или пунктирным списком. Извлекает cdr первой ячейки списка. Если список состоит из более чем одной ячейки, его cdr сам будет списком.

(cdr '(a 3)) - есть (3). caar, cdar, cadr, cddr и еще несколько - любое сочетание до четырех элементов.

List- различное количество аргументов любого типа. Преобразует свои аргументы в настоящий список. Например, (list 'a 'b '(1 2)) - это (a b (1 2)) append- любое количество аргументов - все, кроме последнего, должны быть истинными списками. Объединяет его аргументы в один список, который будет истинным. Например, (append '(1 2) '(3 4)) - это (1 2 3 4).

Арифметические операции

Арифметические операции

Lisp - язык программирования, который поддерживает арифметические операции, обнаруженные на большинстве языков программирования, а также множество уникальных. Большинство операций принимают любое количество аргументов, например, (* 2 3 4 5) оцениваются до 120.

Все являются функциями, в которых аргументы оцениваются до выполнения операции:

  • Сложение — любое количество аргументов, без аргументов дает единичный элемент для сложения, 0 – отрицание — один аргумент, вычитание – два или более аргумента, незаконным без аргументов.
  • Умножение — любое количество аргументов, без аргументов дает единичный элемент для умножения, 1. /взаимный — один аргумент.
  • Деление – два или более аргумента.

Использования в AutoCAD

Использования в AutoCAD

Создание папки вне AutoCAD необходимо, чтобы сохранить все Autolisp файлов и любые другие пользовательские файлы. Перед тем как запустить Lisp, выполняют следующие действия:

Загрузка файла Lisp языка программирования:

  1. Ввести APPLOAD в командную строку и нажать Enter.
  2. Перейти в папку autolisp и щелкнуть нужный файл Lisp, затем нажать LOAD, а затем ЗАКРЫТЬ.

Использование файла Lisp:

Искусственный интеллект Franz

Искусственный интеллект Franz

Franz Lisp является первым изобретением в области искусственного интеллекта от ведущего поставщика технологий Semantic Graph Database. AllegroGraph - это сверхмасштабируемая, высокопроизводительная и транзакционная база данных семантического графика, которая превращает сложные данные в эффективные бизнес-идеи. Allegro CL обеспечивает идеальную среду программирования Lisp для создания сложных критически важных приложений, которые решают проблемы реального мира.

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

Области применения

В 1980-х и 1990-х годах были предприняты огромные усилия для объединения областей применения языка Лисп. Результатом стала стандартизация Коммон Лисп, стандарт ANSI которой был опубликован в 1994 году, а также более известный пользователям расширение ISO выпущенного в 1997 на его основе ISLISP ISO и пересмотренный в 2007 году стандарт ISO / IEC 13816: 2007 (E) .

В то время Лисп был гораздо более популярным, чем в настоящее время. Несмотря на более популярные языки, близкие машине (C, C ++), Lisp остается довольно используемым языком, особенно в качестве встроенного языка в приложениях, где он служит языком расширения. Наиболее известный случай Lisp встраивается использовать текстовый редактор Emacs и язык AutoLISP в AutoCAD .

Lisp занимает четвертое место в строках кода, используемых для реализации исходных пакетов из 8 600, доступных в операционной системе Debian, выпущенных в июне 2005 года. Первые восемь языков распределяются следующим образом: C (57 %) , C ++ (16,8 %), Shell (9 %), Lisp (3 %), Perl (2,8 %), Python (1,8 %), Java (1,6 %), Fortran (1,2 %). В июле 2013 года Лисп находился на 15-й позиции индекса TIOBE.

Сегодня существует еще несколько популярных вариантов Lisp, например:

  1. Common Lisp.
  2. Scheme.
  3. EmacsLisp , для программирования редактора Emacs.

Кроме того, существуют библиотеки для различных языков программирования и реализующие подмножества Lisp или Scheme или хотя бы некоторые функции.

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

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

e) Зеталисп Лисп-машин.

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

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

Из-за своего экспериментального акцента на символьной обработке, Лисп был сначала очень неэффективным для цифровых вычислений, по крайней мере, по сравнению с Fortran. Лисп преодолел свою старую репутацию как безнадежно неэффективный, Лисп теперь использован во многих приложениях, где эффективность не является центральным действием. Например, Лисп стал языком выбора для оболочек операционной системы и для расширения языков, для редактирования систем и автоматизированного проектирования. Лисп, — второй старший язык в широко распространенном использовании сегодня (только Fortran более стар), который непрерывно приспосабливается, чтобы охватывать наиболее современные идеи о программировании.

После создания в начале 70-х годов мощных Лисп-систем были попытки создания языков ИИ, отличных от Лиспа, но на той же основе. Дальнейшее развитие языка идет, с одной стороны, по пути его стандартизации (Стандарт-Лисп, Франц-Лисп, Коммон Лисп), а с другой — в направлении создания концептуально новых языков для представления и манипулирования знаниями в Лисп среде. В настоящее время Лисп реализован на всех классах ЭВМ, начиная с ПЭВМ и кончая высоко производительными вычислительными системами.

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

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

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

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

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

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

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

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

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

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

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

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

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

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

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

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

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

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

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

Новый диалект был реализован в университете в Беркли на ЭВМ VAX 780/11 на языке Си под управлением системы UNIX. Франс Лисп довольно широко используется как под управлением UNIX, так и под управлением VAX/VMS и в настоящее время является наиболее часто используемой версией Лиспа для систем разделения времени. Кроме того, он широко используется и на 32-битовых микро-ЭВМ и рабочих станциях, работающих под управлением UNIX.

Зеталисп Лисп-машин.

Зеталисп также опирается на Маклисп. Он создан в 70-е годы в MIT в рамках проекта Лисп-машины, финансированного оборонным агентством. С самого начала его целью было изготовление коммерческого продукта. В 1979 году в связи с проектом родились два предприятия изготавливающие Лисп-машины: Symbolic Inc. и Lisp Machine Inc. (LMI). После этого в 80-е годы работа по развитию Зета Лиспа продолжалась в них независимо друг от друга на коммерческой основе. В какой-то мере системы отличаются друг от друга, но в части Зета Лиспа машины почти совместимы.[2]

Зета Лисп содержит следующие развитые механизмы и черты:

— широкий выбор типов данных;

— возможность объектно-ориентированного программирования в системе Flavor ;

— современные управляющие структуры, динамические механизмы передачи управления сопрограммы и процессы;

— гибкий механизм ключевых слов в лямбда-списке и многозначные функции;

— ввод и вывод, основывающийся на потоках;

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

— уже готовые функции, в том числе для сортировки, работы с линейными управлениями и матричные вычисления.

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

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

Коммон Лисп.

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

Одним из существенных преимуществ диалекта Коммон Лисп является наличие средств обработки массивов и структур, по своим возможностям не уступающих соответствующим средствам традиционных языков программирования (Фортран, Паскаль). Массивы в Коммон Лиспе могут иметь любое неотрицательное число измерений и индексируются последовательностью целых чисел. Тип компонентов массива может быть произвольным. Выделяется подкласс векторов — одномерных массивов, среди которых отдельно рассматриваются строки и битовые массивы.

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

Удобным средством контроля доступа к различным переменным и функциям Лисп-программ в Коммон-Лиспе являются пакеты. Пакет — множество имен объектов, определенных и доступных в нем. Внутри пакета имена объектов подразделяются на внутренние и внешние. Первые предназначены для использования только внутри данного пакета, а вторые — для обеспечения связи с другими пакетами. Лисп-интерпретатор представляет широкий спектр средств манипулирования с пакетами. Как правило, Лисп-система имеет в своем составе четыре стандартных пакета: lisp (содержащий примитивы системы), user (умалчиваемый пакет прикладных программ и данных пользователя), keyword (содержащий ключевые слова всех встроенных функций и функций, определяемых пользователем), system (зарезервированный для системных целей).

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

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

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

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

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

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

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

Можно смело сказать, что Коммон Лисп содержит почти все, что на сегодняшний день могут дать другие известные языки программирования, и, кроме того, он предусматривает средства для расширения языка.

Современные диалекты языка Лисп можно рассматривать как мощные интерактивные системы программирования. Это объясняется двумя причинами. Во-первых, сам язык Лисп претерпевает серьезные изменения — развиваются средства языка, предназначенные для обработки нетрадиционных для Лиспа типов данных: массивов, векторов, матриц; появляются некоторые средства управления памятью (пакеты), отсутствующие в Лиспе. Серьезные изменения претерпевают и управляющие структуры. Появились несвойственные природе языка Лисп функции, заимствованные из Фортрана, Алгола, Паскаля, Си: Do, Loop, Goto , Case и прочие, позволяющие пользователю, незнакомому с принципами функциональных языков, легко переходить на Лисп. Качество программ снижается, зато возрастает популярность языка. Во-вторых, если на первом этапе развития Лисп-системам была присуща небольшая скорость обработки данных и серьезные ограничения на емкость используемой оперативной памяти, то современные Лисп-системы уже могут соперничать по этим параметрам с такими языками, как Си, Паскаль и др. Использование Лисп-машин вообще практически снимает ограничения памяти и быстродействия.

Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но многие поздние версии обладают также чертами императивности, к тому же, имея полноценные средства символьной обработки становится возможным реализовать объектно-ориентированность, примером такой реализации является платформа CLOS.

Язык Лисп, наряду с языком Ada, прошел процесс фундаментальной стандартизации для использования в военном деле и промышленности, в результате чего появился стандарт Common Lisp. Его реализации существуют для большинства платформ.

Одной из базовых идей языка Lisp является представление каждого символа как узла многокоординатной символьной сети; при этом координаты, свойства, уровни сети записаны в так называемых слотах символа. Основные слоты:

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

Язык Лисп является языком системного программирования для так называемых Лисп-машин, производившихся в 80-е годы, например, фирмой Symbolics.

Содержание

Синтаксис

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

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

Специальные операторы позволяют управлять последовательностью вычислений. С их помощью реализуются ветвления и циклы. Оператор if позволяет вычислить одно из двух выражений в зависимости от выполнения условия, которое тоже является выражением. Если его результат не ЛОЖЬ (не nil ), то вычисляется первый аргумент, иначе — второй. Например, (if nil (list 1 2 "foo") (list 3 4 "bar")) всегда возвращает (3 4 "bar") .

s_expression ::= atomic_symbol | "(" s_expression "." s_expression ")" | list

Читайте также: