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

Автор: Пользователь скрыл имя, 09 Января 2013 в 10:33, курсовая работа

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

Цель курсовой работы – изучение особенностей языка LISP. Для достижения цели курсовой работы в ней будут рассмотрены основные функции данного языка программирования и отличительные особенности некоторых его диалектов.
Для достижения цели курсовой работы были поставлены и решены следующие задачи:
- подробный анализ основных функций языка программирования LISP;
- выявление и анализ отличительных особенностей некоторых диалектов данного языка программирования.

Оглавление

Введение 3
1. Язык программирования ЛИСП 5
1.1 Основные функции языка Лисп 5
1.2 Арифметические функции 7
1.3 Логические функции 7
1.4 Специальные функции 9
2. Особенности диалектов языка ЛИСП 12
2.1. MacLISP 12
2.2. MuLISP 13
2.3. InterLISP 14
2.4 CommonLISP 16
3. Особенности языка ЛИСП 20
Заключение 24
Глоссарий . 26
Список использованных источников…… 28
Приложения…..…………………………………………………………….29

Файлы: 1 файл

Шаповалов С.А. КР Информационная технология.doc

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

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

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 Особенности языка Лисп

 

От других языков программирования Лисп отличается следующими свойствами:

1.   одинаковая форма данных и программ;

2.   хранение данных, не зависящее от места;

3.   автоматическое и динамическое управление памятью;

4.   функциональная направленность;

5.   Лисп является бестиповым языком;

6.   интерпретирующий и компилирующий режимы работы;

7.   пошаговое программирование;

8.   единый системный и прикладной язык программирования.

Рассмотрим эти свойства более подробно.

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

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

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

При автоматическом и динамическом управлении памятью, который применен в Лиспе, пользователь не должен заботиться об учете памяти. Система резервирует и освобождает память автоматически в соответствии с потребностью. Когда память кончается, запускается специальный мусорщик. Мусорщик перебирает все ячейки и собирает являющиеся мусором ячейки в список свободной памяти для того, чтобы их можно было использовать заново. Среда Лиспа постоянно содержится в порядке. В современных ЛИСП-системах выполнение операции сборки мусора занимает от одной до нескольких секунд [1, 7]. В задачах большого объема сборщик мусора запускается весьма часто, что резко ухудшает временные характеристики прикладных программ. Во многих системах мусор не образуется, поскольку он сразу же учитывается. Управление памятью просто и не зависит от физического расположения, поскольку свободная память логически состоит из цепочки списочных ячеек.

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

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

 

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

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

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

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

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

Лисп является одновременно как языком прикладного так и  системного программирования. Он напоминает машинный язык тем, что как данные, так и программы представлены в одинаковой форме. Язык превосходно подходит для написания интерпретаторов и трансляторов как для него самого, так и для других языков. Наиболее короткий интерпретатор Пролога, написанный на Лиспе занимает несколько десятков строк [5, 6].

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

 

Заключение

 

В курсовой работе были рассмотрены  основные функции и особенности языка программирования LISP и отличительные особенности его диалектов.

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

Для ПЭВМ ограничения по памяти и  быстродействию все еще остаются существенными. Однако положение не безнадежно. Развитие LISP – систем для ПЭВМ идет сегодня по трем различным направлениям. Первое связано с увеличением емкости памяти, которая может использоваться LISP – системой. С этой целью ряд компаний разработал версии языка Golden Common Lisp, использующие расширения оперативной памяти и виртуальную память. Второе направление связанно с повышением быстродействия LISP – систем. Третье направление состоит в разработке эффективных компиляторов программ с языка LISP в традиционные языки (чаще всего в язык Си).

Положительным нововведением в  современные диалекты языка можно считать псевдоассемблерные команды, которые позволяют оперировать основными регистрами машины и организовывать прерывания на уровне DOS и  BIOS. Кроме того, многие LISP – системы имеют хорошие интерфейсы с другими языками (Фортран, Паскаль, Ассемблер, Си), что позволяет повысить эффективность прикладных LISP – программ.

 Если же говорить о глобальной  тенденции развития самой идеологии языка LISP, то очевидно, что она связана с созданием объектно – ориентированных версий языка как наиболее пригодных для реализации систем ИИ.

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

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

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

 

Глоссарий

№ п/п

Понятие

Определение

1

Атомы

простейшие неделимые элементы, из которых состоят программы  на языке Лисп

2

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

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

3

Компилятор

программа ЭВМ, предназначенная для  автоматического перевода описания алгоритма с одного языка программирования на другой, в частности на машинный язык

4

Логическое программирование

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

5

Параллельная рекурсия

рекурсия, которая встречается  одновременно в нескольких аргументах функции

6

Простая рекурсия

рекурсия, при которой вызов  функции встречается в некоторой  ветви лишь один раз

7

Предикат

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

8

Список

упорядоченная последовательность, элементами которой являются либо атомы, либо списки

9

Символ

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

10

Строка

любая последовательность символов, которые могут быть напечатаны (кроме двойных кавычек), заключенная в двойные кавычки

11

Рекурсия

способ организации вычислительного  процесса, при котором подпрограмма в ходе выполнения обращается сама к себе


 

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

 

1

«Программирование на языке ЛИСП в системе muLISP-90». Байдун В.В., Кружилов С.И., Сергиевский А.Е, Чернов П.Л. - М.: Моск. энеpг. ин-т, 1993. – 40 С. [Текст]

2

«Функциональное программирование». Хендерсон П.: Пер. с англ.-М.: Мир, 2003. – 637 С. [Текст]

3

 «Мир Лиспа». Хювёнен Э., Сеппянен Й.  В 2-х т. / Пер. с финск.. — М.: Мир, 2000. — ISBN 5-03-001935-9 [Текст]

4

Русскоязычное сообщество лисперов [Электронный ресурс]. Режим доступа: http://lisp.ru/

5

Начальные сведения о языках Лисп-семейства  на русском [Электронный ресурс]. Режим доступа: lisp.narod.ru

6

Русский перевод книги Practical Common Lisp(англ.) [Электронный ресурс]. Режим доступа: pcl.catap.ru/doku.php 

7

  «Язык программирования XLISP». Тужилов  И. В.   Учеб. пособие. - Пенза: Изд-во Пенз. гос. техн. ун-та, 2004. – 126 С.[Текст]

8

Личный сайт Дж. Маккарти с текстами его публикаций [Электронный ресурс]. Режим доступа: http://www-formal.stanford.edu/jmc/

9

«Введение в программирование на языке Лисп» Городняя Л.В.: Учебное пособие для начинающих. - Новосибирск: НГУ, 2005. - 93 с.

10

Энциклопедия языков программирования. [Электронный ресурс]. Режим доступа:  http://progopedia.ru/language/lisp/

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