Презентация на LISP Шестаков А
Подобни презентации
Презентация по темата: "LISP Shestakov AP. LISP2 Lisp (LISP, от английски LISt Processing language" език за обработка на списъци "; съвременен правопис: Lisp) семейство езици за програмиране," - Препис на презентация:
1 ЛИСП Шестаков А.П.
2 LISP2 Lisp (LISP, от английски LISt Processing language "език за обработка на списъци"; съвременен правопис: Lisp) е семейство от програмни езици, програми и данни, в които са представени от системи от линейни списъци с символи. Lisp е вторият най-използван език за програмиране на високо ниво в историята (след Fortran). Създателят на Lisp Джон Маккарти (1960) участва в изследванията на изкуствения интелект
3 LISP3 Традиционният Lisp има динамична система от тип. Езикът е функционален, но много по-късни версии също имат характеристики на императивност, освен това, разполагайки с пълноценни средства за символна обработка, става възможно да се реализира обектна ориентация. Функционалното програмиране е раздел от дискретна математика и парадигма за програмиране, в който процесът на изчисление се интерпретира като изчисляване на стойностите на функциите в математически смисъл (за разлика от функциите като подпрограми в процедурното програмиране) Функционалното програмиране е раздел на дискретна математика и програмна парадигма, при която изчислителният процес се интерпретира като изчисляване на стойностите на функциите в математическото разбиране (за разлика от функциите като подпрограми в процедурното програмиране)
4 LISP4 Функционалното програмиране включва изчисляване на резултатите от функциите от първоначалните данни и резултатите от други функции и не предполага изрично съхранение на състоянието на програмата. Съответно, това не предполага изменчивост на това състояние (за разлика от императива, където една от основните концепции е променлива, която съхранява стойността си и ви позволява да я променяте, докато алгоритъмът работи).
5 LISP5 Предимства Подобрена надеждност на кода Подобрена надеждност на кода Атрактивната страна на изчисленията без гражданство подобрява надеждността на кода благодарение на ясното структуриране и не е необходимо да се проследяват страничните ефекти. Всяка функция работи само с локални данни и работи с тях по един и същи начин, без значение къде, как и при какви обстоятелства се нарича. Невъзможността за мутиране на данни при използването им на различни места на програмата елиминира появата на трудно откриваеми грешки (като например случайното присвояване на неправилна стойност на глобална променлива в императивна програма).
6 LISP6 Удобство при организиране на модулно тестване Удобство при организиране на модулно тестване Тъй като функция във функционалното програмиране не може да генерира странични ефекти, обектите не могат да се променят както вътре в обхвата, така и отвън (за разлика от императивните програми, при които една функция може да зададе някаква външна променлива, четена от втора функция). Единственият ефект от оценката на дадена функция е резултатът, който тя връща, а единственият фактор, който влияе върху резултата, са стойностите на аргументите. По този начин е възможно да се тества всяка функция в програмата, като просто се оценява от различни набори от стойности на аргументи. В този случай не е нужно да се притеснявате за извикване на функции в правилния ред или за правилното формиране на външното състояние. Ако някоя функция в дадена програма премине модулни тестове, тогава можете да сте сигурни в качеството на цялата програма. В императивните програми проверката на връщаната стойност на функция не е достатъчна: функцията може да модифицира външното състояние, което също трябва да бъде проверено, което не трябва да се прави във функционални програми
7 LISP7 Възможности за оптимизация по време на компилация Възможности за оптимизация по време на компилация Традиционно споменатата положителна черта на функционалното програмиране е, че ви позволява да опишете програма в така наречената "декларативна" форма, когато е налице твърда последователност на изпълнение на много операции, необходими за изчисляването на резултата не е изрично посочено, но се генерира автоматично в процеса на изчисляване на функции. Това обстоятелство, както и отсъствието на състояния, дава възможност да се прилагат доста сложни методи за автоматична оптимизация към функционални програми.
8 LISP8 Възможности за паралелизъм Възможности за паралелизъм Друго предимство на функционалните програми е, че те предоставят най-широките възможности за автоматично паралелизиране на изчисленията. Тъй като липсата на странични ефекти е гарантирана, при всяко извикване на функция винаги е възможно да се оценят паралелно два различни параметъра, редът на изчисляването им не може да повлияе на резултата от повикването.
9 LISP9 недостатъци Липсата на задания и тяхното заместване с генериране на нови данни води до необходимостта от постоянно разпределение и автоматично освобождаване на паметта, така че високоефективният събирач на боклук става задължителен компонент в системата за изпълнение на функционална програма.
10 LISP10 Езикът за програмиране Lisp е предназначен предимно за обработка на символна информация. Следователно е естествено, че в света на Лисп числата не играят важна роля. Основните типове данни в Lisp се наричат двойка атом и точка. Елементарните данни на Лисп се наричат атоми. Атомите могат да бъдат под формата на имена, числа или други обекти, които са неделими от основните средства на езика. Атомите, които изглеждат като имена, могат да имат свойства, които са зададени от системата или програмата. Променливите стойности и дефинициите на функции са примери за свойства. От особен интерес са рекурсивните функции.
11 LISP11 Основният механизъм на езика Lisp е капсулираната дефинираща глава на списъка и опашката на прикрепения към него списък, който рекурсивно може да бъде и списък. Машината Lisp е способна да възприеме всеки списък, който дойде до нея, на най-абстрактното ниво, например като мета-Lisp машина, която модифицира възприемащата машина. Всяка програма на Lisp се състои от поредица от изрази (форми). Резултатът от работата на програмата е да оцени тези изрази. Всички изрази са написани като списъци на една от основните структури на Lisp, така че лесно могат да бъдат създадени с помощта на самия език. Това ви позволява да създавате програми, които модифицират други програми или макроси, което ви позволява значително да разширите възможностите на езика.
12 LISP12 По този начин една програма LISP е последователност от изчислени форми. Рекурсията - свеждане до себе си - позволява такива правила да бъдат записани съвсем кратко и ясно. Стекът поддържа рекурсивни функции.
13 LISP13 Принципи на функционалното програмиране 1.Унификация на понятията „функция“ и „стойност“. Със символното представяне на информация няма съществена разлика в естеството на представянето на ценности и функции. Следователно, няма пречки за обработката на представяне на функции по същия начин, както се обработват стойности, т.е. представленията на функциите могат да бъдат изградени от техните части и дори изчислени, когато информацията се получава и обработва. Ето как изграждат компилаторните програми. 2. В допълнение към постоянните функции, променливите функции са напълно допустими.
14 LISP14 3. Самоприложимост. Първите имплементации на Lisp бяха приложени по метода на размотаване и системата веднага включваше както интерпретатор, така и компилатор. И двата инструмента са описани много точно в самия Lisp и по-голямата част от описанията не надвишават няколко страници. 4. Интегралност на ограниченията върху пространствено-времевите характеристики. Ако няма достатъчно памет, по принцип за цялата задача, а не за отделни блокове с данни, може да има малко значителни възможности за нейното решение. Ако няма достатъчно памет, специална програма за почистване се опитва да намери свободна памет. Новите реализации на този механизъм рационално отчитат предимствата на процесите отдолу нагоре върху големи количества памет.
15 LISP15 5. Прецизиране на решенията. Реализацията на Lisp обикновено съдържа списъци с обектни свойства, адаптирани към външната дефиниция на отделни елементи от поведението на програмируемата система. 6. Динамичен контрол на изчисленията и програмния дизайн В стандартните програмни езици императивната организация на изчисленията се приема на принципа на незабавно и задължително изпълнение на всяка следваща команда. Това не винаги е оправдано и ефективно. Има много неимперативни модели за контрол на процесите, които ви позволяват да прекъсвате и отлагате процеси и след това да ги възстановявате и стартирате или отменяте, което се предоставя в Lisp чрез конструиране на функции, блокиране на изчисления и тяхното изрично изпълнение.
16 LISP16 Подобно изглеждащите атоми са неразличими по своите свойства. Терминът "атом" е избран по аналогия с химичните атоми, чиято структура е предмет на друга наука. Според тази аналогия атомът може да има доста сложна структура, но атомът не е предназначен да бъде анализиран на части чрез основните средства на езика. По-сложни данни в Lisp се изграждат от подобно подредени двоични възли, съдържащи двойки обекти от всякакъв вид. Всеки двоичен възел съответства на минималния блок памет, разпределен от системата за програмиране при организиране и обработка на структури от данни. Разпределението на блок памет и поставянето на двойка данни в него се извършва от функцията CONS (от думата консолидация), а извличането на лявата и дясната част от блока се извършва съответно от функциите CAR и CDR (" съдържание на адресната част на регистъра "," съдържание на намаляващата част на регистъра ").
17 LISP 17 Функционални аргументи Резултати Против Atom X (Atom X) Car Atom Cdr X
18 LISP18 Списъци Всеки списък може да бъде конструиран от празен списък и атоми с помощта на CONS и всяка част от него може да бъде избрана с помощта на подходящ CAR-CDR състав. CONS - Функция, която изгражда списъци от двоични възли, като ги запълва с двойки обекти, които са стойностите на двойка от нейните аргументи. Първият произволен аргумент се поставя от лявата страна на двоичния възел, а вторият, който е списък, е отдясно. CONS - Функция, която изгражда списъци от двоични възли, като ги запълва с двойки обекти, които са стойностите на двойка от нейните аргументи. Първият произволен аргумент се поставя от лявата страна на двоичния възел, а вторият, който е списък, е отдясно. CAR - Функция, която осигурява достъп до първия елемент от списъка - неговата „глава“. CAR - Функция, която осигурява достъп до първия елемент от списъка - неговата „глава“. CDR - Функция, която съкращава списъка с един елемент. Осигурява достъп до „опашката“ на списъка, т.е. до останалата част от списъка след премахване на главата му. CDR - Функция, която съкращава списъка с един елемент. Осигурява достъп до „опашката“ на списъка, т.е. до останалата част от списъка след премахване на главата му. ATOM - функция, която прави разлика между композитни и атомни обекти. За атомите стойността му е „true“, а за по-сложни структури от данни е „false“. ATOM - функция, която прави разлика между композитни и атомни обекти. За атомите стойността му е „true“, а за по-сложни структури от данни е „false“. EQ - функция, която тества атомните обекти за равенство. EQ - функция, която тества атомните обекти за равенство.
19 LISP19 Разликата между стойностите на истината в Lisp обикновено се приравнява на разликата между празен списък и други обекти, които програмистът може да придаде на програмата някакво друго значение. По този начин стойността "false" винаги е нула. Ако трябва да покажете изрично стойността "true", тогава се използва стандартната константа - атомът T (true), но ролята на стойността "true" може да се играе от всеки обект, различен от празния списък.
20 Израз LISP20S Изразът S е или атом, или двойка от два S израза в скоби, разделени с точка. Всички сложни данни се създават от подобно подредени блокове - двоични възли, съдържащи двойки обекти от всякакъв вид. Всеки двоичен възел съответства на най-малкия блок памет. Списъците са подмножество на S-изрази, които се придвижват в десните краища с атом Nil. Всеки S-израз може да бъде конструиран от атоми с помощта на CONS и всяка част от него може да бъде извлечена с помощта на CAR-CDR.
21 LISP21 Пример. Factorial (DEFUN Factorial (N) (COND ((= N 0) 1) (COND ((= N 0) 1) (T (* N (Factorial (- N 1)))))))