Презентація на тему LISP Шестаков А
Подібні презентації
Презентація на тему: " LISP Шестаков А.П.. LISP2 Лісп (LISP, від англ. LISt Processing language "мова обробки списків"; сучасне написання: Lisp) сімейство мов програмування," - Транскрипт:
1 LISP Шестаков А.П.
2 LISP2 Лісп (LISP, від англ. LISt Processing language «мова обробки списків»; сучасне написання: Lisp) сімейство мов програмування, програми та дані в яких представляються системами лінійних списків символів. Лісп є другою в історії (після Фортрана) високорівневою мовою програмування, що використовується в даний час. Творець Ліспа Джон Маккарті (1960) займався дослідженнями в галузі штучного інтелекту
3 LISP3 Традиційний Лісп має динамічну систему типів. Мова є функціональною, але багато пізні версії мають також риси імперативності, до того ж, маючи повноцінні засоби символьної обробки, стає можливим реалізувати об'єктно-орієнтованість. Функціональне програмування розділ дискретної математики та парадигма програмування, в якій процес обчислення трактується як обчислення значень функцій у математичному розумінні (на відміну від функцій як підпрограм у процедурному програмуванні) Функціональне програмування розділ дискретної математики та парадигма програмування, в якій процес обчислення трактується як обчислення значень функцій у математичному розумінні (на відміну від функцій як підпрограм у процедурному програмуванні)
4 LISP4 Функціональне програмування передбачає обчислення результатівфункцій від вихідних даних і інших функцій, і передбачає явного зберігання стану програми. Відповідно, не передбачає воно і змінність цього стану (на відміну від імперативного, де однією з базових концепцій є змінна, що зберігає своє значення і дозволяє змінювати його в міру виконання алгоритму).
5 LISP5 Переваги Підвищення надійності коду Підвищення надійності коду Приваблива сторона обчислень без станів підвищення надійності коду за рахунок чіткої структуризації та відсутності необхідності відстеження побічних ефектів. Будь-яка функція працює тільки з локальними даними та працює з ними завжди однаково, незалежно від того, де, як і за яких обставин вона викликається. Неможливість мутації даних при користуванні ними в різних місцях програми виключає появу помилок, що важко виявляються (таких, наприклад, як випадкове привласнення невірного значення глобальної змінної в імперативній програмі).
6 LISP6 Зручність організації модульного тестування Зручність організації модульного тестування Оскільки функція у функціональному програмуванні не може породжувати побічні ефекти, змінювати об'єкти не можна як усередині видимості, так і зовні (на відміну від імперативних програм, де одна функція може встановити якусь зовнішню змінну, зчитувану другою функцією). Єдиним ефектом від обчислення функції є результат, що повертається їй, і єдиний фактор, що впливає на результат це значення аргументів. Таким чином, є можливість протестувати кожну функцію в програмі, просто обчисливши її від різних наборів значень аргументів. При цьому можна не турбуватися про виклик функцій у правильному порядку, ні про правильне формування зовнішнього стану.Якщо будь-яка функція у програмі проходить модульні тести, можна бути впевненим у ролі всієї програми. У імперативних програмах перевірка значення функції, що повертається, недостатня: функція може модифікувати зовнішній стан, який теж потрібно перевіряти, чого не потрібно робити у функціональних програмах
7 LISP7 Можливості оптимізації при компіляції Можливості оптимізації при компіляції Традиційно згадуваною позитивною особливістю функціонального програмування є те, що воно дозволяє описувати програму в так званому «декларативному» вигляді, коли жорстка послідовність виконання багатьох операцій, необхідних для обчислення результату, явно не задається, а формується автоматично у процесі обчислення функцій. Ця обставина, а також відсутність станів дає можливість застосовувати до функціональних програм досить складні методи автоматичної оптимізації.
8 LISP8 Можливості паралелізму Можливості паралелізму Ще однією перевагою функціональних програм є те, що вони надають найширші можливості для автоматичного розпаралелювання обчислень. Оскільки відсутність побічних ефектів гарантована, у будь-якому виклику функції завжди допустимо паралельне обчислення двох різних параметрів, порядок їх обчислення не може вплинути на результат виклику.
9 LISP9 Недоліки Відсутність присвоєння та заміна їх на породження нових даних призводять до необхідності постійного виділення та автоматичного звільнення пам'яті, тому в системі виконання функціональної програми обов'язковим компонентом стає високоефективний збирач сміття.
10 LISP10 Мова програмування Лісп призначений насамперед для обробки символьної інформації. Тому природно, щоу світі Лиспа числа грають далеко ще не головну роль. Основні типи даних у Лиспе називаються атом і точкова пара. Елементарні дані мови Лісп називають атомами. Атоми можуть мати вигляд імен, чисел чи інших об'єктів, неподільних базовими засобами мови. Атоми, що виглядають як імена, можуть мати властивості, що задаються системою або програмою. Значення змінних та визначення функцій – приклади властивостей. Особливий інтерес становлять рекурсивні функції.
11 LISP11 Основний механізм мови Лісп інкапсульована до списку визначальна голова списку та підключений до неї хвіст списку, який також рекурсивно може бути списком. Лісп-машина здатна сприймати кожен список, що надходить на неї, на самому абстрактному рівні, наприклад як мета-Лісп-машину, що модифікує сприймаючу машину. Будь-яка програма мовою Лісп складається з послідовності виразів (форм). Результат роботи програми полягає у обчисленні цих виразів. Всі вирази записуються у вигляді списків однієї з основних структур Лиспа, тому вони можуть бути легко створені за допомогою самої мови. Це дозволяє створювати програми, які змінюють інші програми чи макроси, що дозволяють істотно розширити можливості мови.
12 LISP12 Таким чином, програма на LISP – це послідовність обчислюваних форм. Рекурсія – зведення себе – дозволяє такі правила записувати досить лаконічно і ясно. Стек забезпечує роботу з рекурсивними функціями.
13 LISP13 Принципи функціонального програмування 1. Уніфікація понять «функція» та «значення». При символьному поданні інформації немає принципової різниці у природі зображення значень та функцій. Отже, немає і перешкод обробки уявлень функцій тими самими засобами, якими обробляються значення, тобто.уявлення функцій можна будувати з їх частин і навіть обчислювати в міру надходження та обробки інформації. Саме так конструюють програми – компілятори. 2. Крім функцій-констант цілком допустимі функції-змінні.
14 LISP14 3. Самозастосовність. Перші реалізації Лиспа були виконані методом розкручування, причому у складі системи одночасно були передбачені і інтерпретатор та компілятор. Обидва ці інструменти були дуже точно описані на самому Лиспі, причому основний обсяг описів не перевищував пару сторінок. 4. Інтегральність обмежень на просторово-часові показники. Якщо не вистачає пам'яті, важливо на все завдання, а не на окремі блоки даних, можливо мало істотних можливостей для її вирішення. При нестачі пам'яті спеціальна програма "сміттяр" намагається знайти вільну пам'ять. Нові реалізації цього механізму раціонально враховують переваги висхідних процесів великих обсягах пам'яті.
15 LISP15 5. Уточнення рішень. Реалізація Лиспа зазвичай містить списки властивостей об'єктів, пристосовані до зовнішнього визначення окремих елементів поведінки програмованої системи. 6. Динамічне управління обчисленнями та конструюванням програм У стандартних мовах програмування прийнято імперативну організацію обчислень за принципом негайного та обов'язкового виконання кожної чергової команди. Це не завжди виправдано та ефективно. Існує багато неімперативних моделей управління процесами, що дозволяють переривати та відкладати процеси, а потім їх відновлювати та запускати або скасовувати, що забезпечено в Лиспі засобами конструювання функцій, блокування обчислень та їх явного виконання.
16 LISP16 Атаки, що однаково виглядають, не помітні за своїми властивостями. Термін "атом" обраний за аналогією з хімічнимиатомами, будова яких предмет іншої науки. Відповідно до цієї аналогії атом може мати досить складну будову, але атом не призначений для розбору частини базовими засобами мови. Більш складні дані в Лиспе вишиковуються з однаково влаштованих бінарних вузлів, що містять пари об'єктів довільного вигляду. Кожен бінарний вузол відповідає мінімальному блоку пам'яті, що виділяється системою програмування при організації та обробці структур даних. Виділення блоку пам'яті та розміщення в ньому пари даних виконує функція CONS (від слова consolidation), а вилучення лівої та правої частин з блоку виконують функції CAR і CDR відповідно (content of address part of register), "content of decrement part of register" ).
17 LISP17 ФункціяАргументиРезультат ConsАтомX ( Атом. X ) Car Атом Cdr X
18 LISP18 Списки Будь-який список може бути побудований з порожнього списку та атомів за допомогою CONS і будь-яка його частина може бути виділена за допомогою відповідної композиції CAR-CDR. CONS - Функція, яка будує списки з бінарних вузлів, заповнюючи їх парами об'єктів, що є значеннями пари її аргументів. Перший аргумент довільного вигляду розміщується у лівій частині бінарного вузла, а другий, що є списком, - у правій. CONS - Функція, яка будує списки з бінарних вузлів, заповнюючи їх парами об'єктів, що є значеннями пари її аргументів. Перший аргумент довільного вигляду розміщується у лівій частині бінарного вузла, а другий, що є списком, - у правій. CAR – Функція, що забезпечує доступ до першого елементу списку – його "голові". CAR – Функція, що забезпечує доступ до першого елементу списку – його "голові". CDR – функція, що вкорочує список на один елемент. Забезпечує доступ до "хвості" списку, тобто. до залишку списку після видалення голови. CDR –Функція, що вкорочує список один елемент. Забезпечує доступ до "хвості" списку, тобто. до залишку списку після видалення голови. ATOM - Функція, що розрізняє складові та атомарні об'єкти. На атомах її значення "істина", а на складніших структурах даних - "брехня". ATOM - Функція, що розрізняє складові та атомарні об'єкти. На атомах її значення "істина", а на складніших структурах даних - "брехня". EQ – функція, яка перевіряє атомарні об'єкти на рівність. EQ – функція, яка перевіряє атомарні об'єкти на рівність.
19 LISP19 Відмінність істиннісних значень Ліпе прийнято ототожнювати з різницею між порожнім списком та іншими об'єктами, яким програміст може надати у програмі деякий інший сенс. Отже, значення "брехня" – це завжди Nil. Якщо потрібно явно зобразити значення "істина", то використовується стандартна константа - атом T (true), але роль значення "істина" може виконати будь-який, відмінний від порожнього списку об'єкт.
20 LISP20S-вираз S-вираз - це або атом або укладена в дужки пара двох S-виражень, розділених точкою. Усі складні дані створюються з однаково влаштованих блоків – бінарних вузлів, що містять пари об'єктів довільного вигляду. Кожен бінарний вузол відповідає мінімальному блоку пам'яті. Списки – це підмножина S-виражень, рух праворуч якими завершується атомом Nil. Будь-яке S-вираження може бути побудоване з атомів за допомогою CONS і будь-яка його частина може бути виділена за допомогою CAR-CDR.
21 LISP21 Приклад. Факторіал (DEFUN Факторіал (N) (COND ((= N 0 ) 1 ) (COND ((= N 0 ) 1 ) (T ( * N (Факториал (- N 1 ))) ) )))