WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Мова програмування Лісп - Реферат

Мова програмування Лісп - Реферат


Реферат на тему:
Мова програмування Лісп
За однією з класифікацій мови програмування (МП) діляться на процедурні, які також називаються операторними або імперативними та декларативні мови. Більшість мов що сьогодні використовуються - Бейсік, Фортран, Паскаль, Сі, відносяться до процедурних мов. До класу декларативних мов відносяться функціональні або апплікативні - Лісп, Лого та логічні мови, відомим представником якого є Пролог. На практиці МП не є чисто процедурними, функціональними чи логічними. На процедурній мові можна написати функціональну програму і навпаки.
Процедурна програма складається з послідовності операторів та виразів, які керують її виконанням. Типичними операторами є оператори присвоєння, ввода-виводу, керування та циклу.
Функціональна програма складається з сукупності визначених функцій. Функції, в свою чергу, можуть викликати інші функції. Обчислення починається з виклику деякої функції. Чисте функціональне програмування не має присвоєнь та засобів передачі керування. Повторні обчислення здійснюються за допомогою рекурсії, яка є основним засобом функціонального програмування.
muLisp працює на комп'ютері з операційною системою MS-DOS або PC-DOS. Програма mulisp.com є інтерпретатором МП muLisp. muLisp є потужною МП, має великі функціональні засоби для обробки структур даних, створених користувачем. muLisp є символьною МП, яка призначена для обробки списків. (Lisp - List Processing). Будь-яка структура даних є об'єктом.
Робота з Ліспом нагадує роботу з карманним калькулятором: користувач вводить вираз (він обов'язково повинен закінчуватися символом та мати збалансовану кількість дужок), який читає машина, потім обчислює (інтерпретує), та видає результат. Цей процес введення-читання-обчислення-видачі результату буде відбуватися в циклі доти, доки користувач не введе команду (SYSTEM), яка завершує роботу з muLisp і передає керування операційній системі.
Об'єкти Ліспу
Об'єкти можуть бути двох типів: прості та складені. Прості об'єкти називаються атомами. До атомів відносяться символи та числа. Символ не може починатися з цифри. muLisp не розрізняє маленькі та великі літери, а перетворює всі введені літери в великі. Атом є неподільним, тобто його не можна розбити на компоненти. Атом, як і людина, має ім'я. Іменами атомів є рядки символів. DOG, CAT, qw1232df, -32 є типовими іменами атомів. Символи T та NIL мають в Ліспі спеціальне призначення: вони позначають відповідно логічні значення істини та хибності. Ці символи завжди повинні мати одне фіксоване значення. Їх не можна використовувати в якості імен інших об'єктів Ліспу.Числа та логічні значення T та NIL є константами, всі інші символи - змінними.
Складними об'єктами даних є списки. Список містить нуль (тоді говорять про порожній список) або більше об'єктів, кожний з яких може бути як простим, так і складеним. (FACE, LOOK, NOSE) є списком, який складається з трьох атомів. Порожній список позначається NIL = (), який є атомом. Список називається лінійним, якщо його елементи є атомами. Інакше говорять про списки з підсписками, наприклад: (7 (8 9) TR).
Для того щоб введений вираз не обчислювався, перед ним ставиться апостроф ('). Якщо вираз вводиться без апострофа, то повертається його значення. При запуску програми muLisp значенням кожного атома вважається він сам. Значенням числа завжди є саме число, тому перед числами апостроф не ставиться. Тобто після старту системи при вводі Q результатом буде його значення - Q, а при вводі 'Q - буде завжди Q. Апостроф перед виразом - це скорочення форми QUOTE, яка записується в наступній формі: 'вираз = (QUOTE вираз). QUOTE можна використовувати як спеціальну функцію з одним аргументом, яка нічого з ним не робить, а повертає як результат сам аргумент.
Списки задаються переліком елементів, взятих в дужки, перед якими ставиться апостроф. Наприклад: '(ice, hen) або '((one 1) (two 2) (three 3)).
Примітивні функції Ліспу
Lisp має п'ять примітивних функцій. Виклик функції має наступний формат:
(name arg1 arg2 ...), де name - ім'я функції, arg1,arg2,... - її аргументи.
1. (CAR ) - голова списку.
2. (CDR ) - хвіст списку.
3. (CONS ) - об'єднання (конкатенація) об'єкта зі списком.
4. (EQL ) - порівняння двох атомів.
5. (ATOM ) - перевірка чи є атомом.
CAR та CDR називаються селекторними функціями, оскільки вони дають можливість вибирати або знищувати частину об'єкта. Результатом функції (CAR list) завжди є перший елемент списку list, якщо він непорожній і NIL в іншому випадку. Результатом функції (CDR list) є список list без першого елемента, якщо list містить більш одного елемента і NIL в іншому випадку.
$ (CAR '(q w e r t y)) $ (CDR '(q w e r t y)) $ (CAR '((one 1) (two 2)))
q (w e r t y) (one 1)
$ (CAR '()) $ (CDR '(tree)) $ (CDR '((q w)) $ (CDR '())
NIL NIL NIL NIL
За допомогою функцій CAR, CDR можна знаходити за даним списком будь-який його підсписок або атом. Дозволяється використовувати функції, які є комбінаціями CAR та CDR. Імена таких функцій починаються на C і закінчуються на R, а між ними знаходиться послідовність літер A та D (але не більше 4 літер в реалізації muLisp), яка вказує шлях обчислення.
$ (CAR (CDR (CDR '(q w e r t y)))) $ (CAR (CDR (CDR '((q 1) (w 2) (e 3)))))
$ (CADDR '(q w e r t y)) $ (CADDR '((q 1) (w 2) (e 3)))
e (e 3)
$ (CDR (CDR '((q 1) (w 2) (e 3)))) $ (CAR (CAR '((q w))))
$ (CDDR '((q 1) (w 2) (e 3))) $ (CAAR '((q w)))
((e 3)) q
Функція конструктора CONS використовується для додання об'єкту до заданого списку. Об'єкт який додається, стає головою списку. Якщо другий аргумент не задано, то він вважається рівним NIL.
$ (CONS '(q w) '(r (t y))) $ (CONS apple '(q w)) $ (CONS '(q w) '(r t y)) $ (CONS 5)
((q w) r (t y)) (apple q w) ((q w) r t y) (5)
Якщо результатом виразу (CONS ) буде , то результатом (CAR ) буде , а результатом (CDR ) буде .
$ (CAR (CONS '(q w) '(r (t y)))) $ (CAR (CONS apple NIL))
(q w) apple
Функцією порівняння є EQL. Вона порівнює значення першого та другого аргумента, які обов'язково повинні бути атомами, та повертає значення істини (Т) або хибності (NIL).
$ (EQL 'qw 'qw) $ (EQL (CAR '(q w)) q) $ (EQL (CAR '(q,w) NIL)
T T F
При написанні програм на Ліспі часто виникає запитання: чи є даний об'єкт атомом? Це питання вирішує предикат ATOM. Він повертає Т, якщо об'єкт є атомом і NIL в іншому випадку. Порожній список NIL є атомом.
$ (ATOM qwerty) $ (ATOM '(q w e)) $ (ATOM '())
T F T
$ (ATOM '(q)) $ (ATOM 3)
F T
Функції призначення
Функції призначення застосовуються для надання значень програмним змінним. До них відносяться:
1. (SET ) - заміна символа об'єктом
2. (SETQ ... ) - спеціальна форма функції SET
3. (PSETQ ... ) - спеціальна форма функціїSET
4. (POP ) - повертає вершину стека (списку)
5. (PUSH ) -
Loading...

 
 

Цікаве