ПАРАДИГМА ФУНКЦІОНАЛЬНОГО ПРОГРАМУВАННЯ 2 страница
Компанії, розроблювачі мови Common Lisp, випускають його реалізації для різних операційних систем.
Компанія Franz випустила версію Allegro Common Lisp для GNU / LINUX(безкоштовну), WINDOWS, OSX.
Реалізація CMUCL розроблена в університеті Карнегі Мелан.
Реалізація SBCL є розвитком реалізації CMUCL і дозволяє працювати з відкритими вхідними текстами системи програмування. У реалізації є можливість компілювати програму користувача у машинний код. Реалізація SBCL – розроблено для UNIX систем.
Ведуча фірма – розроблювач роботів IS Robotics пропонує на ринці відкриту програмну архітектуру для керування робото технічними системами на основі технології CORBA – MOBILITY Robot Software Development Environment Package.
Программа має набір готових компонентів для конструювання керуючих систем. Графічна оболонка середовища виконана на Java, а програмування виконано на мові L – удосконаленому діалекті Common Lisp.
Мова L підтримує паралельне виконання і синхронізацію роботи множини процесів, що необхідно при утворенні роботів з декількома системами керування рухом і аналізом інформації від різних периферійних датчиків.
4.3 Система програмування мови Practical Common Lisp
Для установки системи програмування Practical Common Lisp використовуйте архів lispbox-0.7-clisp-2.37.rar. Добутий з архіву дистрибутів легко установити за допомогою файлу Lispbox.bat.
Система програмування забезпечує користувача оболонкою, яка дозволяє використовувати будь-яку реалізацію мови Common Lisp, що створена за стандартом, згладжує нестиковки між реалізаціями Common Lisp.
Базовою програмою системи програмування є текстовий редактор Emacs. Інтерпретатор Practical Common Lisp взаємодіє з ним через оболонку Slime.
Текстовий редактор EMACS зберігає інформацію про свою роботу та роботу користувача разом з процедурами, що обслуговують цю інформацію, у об’єктах. Об’єкти називають буферами. Вміст середовища Common Lisp разом з інтерпретатором та інші програми Common Lisp разом з їх інформацією подаються також об’єктами. Об’єкти текстового редактору та Common Lisp взаємодіють через оболонку SLIME. Оболонка в свою чергу має об’єкти, які виконують різні функції.
Під час роботи зв’язок оболонки з Common Lisp може бути розірвано. Зв’язок можна поновити за командою „ALT-x slime”.
4.4 Текстовий редактор EMACS
4.4.1 Загальні властивості Emacs
Текстовий редактор Emacs написаний на мові ЕLisp, за винятком деяких функцій, які написано на мові С (для швидкості роботи). Редактор має властивість розширюватись, користувач може додавати нові команди написані на мові Лісп. Редактор Emacs дозволяє себе корегувати, завантажуючи свої функції у буфер під час роботи.
Працює Еmacs в багатозадачному режимі, реальному часі. Екран часто поновлюється(після набору одного або декількох символів), під час виконання команди можна редагувати текст.
Emacs відноситься до редакторів, що настроюються: можна призначати команди до інших клавіш. Меню редактору змінюється, залежно від ситуації.
Текстовий редактор Emacs має всі властивості сучасних розвинених редакторів.
4.4.2 Фрейми
Екран або Х - вікно називають фреймом. Фрейм складається з основного вікна для подавання вмісту інформації буферу та додаткових вікон. Додаткові вікна вказують режими роботи з інформацією буферу або команди, які можна виконати для цього буферу. Кожне основне вікно розширюється додатковими вікнами (extended), тому фрейм називають Х - вікном.
Редактор запускається з одним фреймом, але можна утворити ще фрейм за опцією меню File/New frame або командою CTRL-x символ. Залежно від вибору символу застосовуються різні способи створення фрейму.
У текстовому редакторі існує два способи роботи користувача:
- за опціями меню;
- за командами.
Фрейм – екран містить рядок – меню та один або декілька фреймів (Х - вікна). Фрейм X - вікно складається з середньої робочої частини для тексту; двох нижніх рядків: рядку режиму, області луни. Рядок режиму розташовано над областю луни.
4.4.3 Буфери та їх режими роботи
Кожному фрейму відповідає буфер редактору або буфер Common Lisp. Один буфер може мати декілька вікон. Ім’я буферу може бути будь-якої довжини.
Ім’я буфера співпадає з ім’ям файлу, вміст якого розміщено у буфері. Якщо користувач звертається до файлу(команда Open File), то для нього автоматично утворюється буфер та вікно.
Для виконання команд Emacs автоматично створює необхідний буфер. Наприклад, для вмісту каталогу за командою Open Directory або за командою Help. Користувач може сам cтворити порожній буфер з будь-яким ім’ям.
Якщо буферів декілька, то буфер з курсором називають обраним. Позиція курсору в тексті буфера відмічається кольоровим прямокутником(точкою). Щоб запам’ятати позицію курсору у тексті, що раніше було обраним, використовується порожній прямокутник(точка).
Більшість команд та увід відноситься до обраного буферу. Команди миші відносяться до буферу на якому виконано щиглик. У довідкові буфери не можна вводити. При вході у текстовий редактор Emacs утворює буфери та встановлює їх основні режими роботи:
Таблиця 4.1-Основні режими роботи буферів
Назва буферу | Об’єм | Основний режим | Призначення |
*slime-repl clisp-2.37* | REPL | Робота з Common Lisp | |
*scratch* | Lisp Interaction | Допоміжний | |
*Messages* | Fundamental | Накопичення повідомлень користувачу | |
*Compile-Log* | Fundamental | Зберігає інформацію про компіляцію | |
*slime-events* | Fundamental | Зберігає інформацію про події у оболонці | |
*inferior-lisp* | Comint | Повідомлення про роботу на нижньому рівні |
У певний момент кожен буфер може працювати у одному основному режимі: Fundamental, Text, Lisp, C, Texinfo та інші.
Режим „REPL”(опція меню) визначає можливості керування роботою Common Lisp. Режим „Lisp Interaction” – режим взаємодії користувача з ELISP. Режим „Fundamental” – режим тільки для читання. Режим „Comint” коментує події на нижньому рівні.
4.4.4 Рядок режиму буфера
Кожен буфер має рядок режиму. Щоб висвітлити рядок режиму у вікні на екрані, треба розгорнути вікно.
Рядок режиму містить назву буферу. Для швидкої зміни вікна буферу треба клацнути на назві буферу у рядку режиму. Потягнувши за рядок режиму можна змінити розмір вікна. Вміст рядку показано у таблиці 4.2.
Таблиця 4.2-Символи рядку режиму
Символи | Назва буферу | Режими | № поточного рядку L | Позиція | |||||
Основ ний | Другорядний | ||||||||
- | \ | * | * | *slime-repl clisp-2.37* | REPL | Abbrev | ALL |
Встановлюючи курсор на 1 символ рядку, можна одержати інформацію про можливі у даному контексті команди:
- зробити на екрані одне вікно командою (С-х 1), незалежно від того скільки вікон було створено на екрані;
- зробити друге вікно, що розташовано горизонтально можна командою: (С-х 2), вміст вікна – дублюється обраний буфер;
- зробити друге вікно, що розташовано вертикально: (С-х 3), вміст вікна обраний буфер.
Встановлюючи курсор на 2 символ рядку, можна одержати інформацію про набір кодування системи, а натиснувши праву клавішу миші можна одержати буфер з повним описом кодування.
Якщо 2 символ містить:
- «-», то кодування по замовчанню;
- «1», то кодування ISO Latin 1;
- «5», то кодування Cirillic 5.
Символ 3 вказує на метод вводу. Символ 3 заміщується на « \ », якщо ознака кінця рядку «ВК» та «ПС».
Символи 4 і 5заміщуються , якщо буфер вікна:
- редагувався «**»;
- не редагувався «--».
Встановлюючи курсор на символ 4, можна одержати режим роботи з буфером:
- «тільки читати», за правою кнопкою миші можна змінити вказаний режим. Знак % у 4 символі означає, що режим „тільки читати”;
- «не тільки читати», за правою кнопкою миші можна змінити вказаний режим. Знак * означає, що режим „не тільки читати”.
Встановлюючи курсор на 5 символ можна одержати інформацію про команду модифікування режиму. Наприклад, натиснувши праву кнопку миші можна замінити режим «читати-писати» на режим «тільки читати».
У дужках рядка показано назву основного і другорядних режимів роботи з буфером. Наприклад, при роботі з Common Lisp використовується основний режим REPL, тобто можна застосовувати команди опції REPL.
Другорядний режим це – режим, який включено для обраного буфера і тільки для обраного вікна. Обрати другорядний режим можна встановивши покажчик миші на основний режим у рядку режиму та натиснувши праву кнопку миші. Прикладом другорядних режимів можуть бути режими Overwrite та Abbrev. Перший дозволяє перезаписувати файл, а другий працювати з командами редагування тексту текстового редактору WORD.
У рядку біля літери «L» вказано номер рядка у якому знаходиться курсор. Позиція All вказує, що у вікні показано всі рядки буфера. Символ ТОР вказує, що курсор знаходиться у першому рядку. Символ ВОТ показує, що курсор знаходиться у останньому рядку, або «число %» показує скільки % тексту знаходиться зверху вікна.
4.4.5 Область луни
Область луни знаходиться під рядком режиму. Вона відлунює події, які є наслідком дій користувача; або надає підказки про помилки і наступні дії. Інформаційні повідомлення з області луни накопичуються у буфері *Messages*.
Область луни використовується також для Міні буфера – вікна для вказівки аргументів команд. Наприклад, користувач хоче утворити порожній буфер з будь-яким ім’ям за командою CTRL-x b,а ім’язадати у міні буфері. Вийти з буферу можна за командою C-g.
Для вводу у міні буфер символу(імені) можна користуватись командою авто доповнення: клавіша TAB. Ввести один або декілька знаків і натиснути клавішу TAB. У вікно HELP виводиться список символів. Обраний символ заноситься у міні буфер.
4.4.6 Меню текстового редактору
Оболонка SLIME системи програмування COMMON LISP має головне меню, команди якого призначено для роботи з COMMON LISP (підменю REPL), текстовим редактором EMACS (підменю FILE, EDIT, OPTIONS, BUFFER, TOOLS, HELP), оболонкою SLIME (підменю SLIME).
Текстовий редактор забезпечує:
- роботу з файлами, каталогами, буферами (за командами підменю FILE);
- редагування текстів (за опціями підменю EDIT);
- встановлення додаткових можливостей для роботи з текстовим редактором: вибір мов спілкування, вибір набору символів, шрифту, кодування; застосування структурного редактору, синтаксичного контролю, тощо (за опціями підменю ОPTIONS);
- інструментальними засобами для пошуку файлів; налагоджування функцій редактору EMACS; порівняння, злиття файлів; спілкування у Інтернеті, тощо (за опціями підменю TOOLS);
- перегляд та активізування буферів (за опціями підменю BUFFER);
- довідку про роботу з текстовим редактором (за опціями підменю HELP).
4.4.7 Команди текстового редактору
Виконати дію можна набравши команду на клавіатурі. Команду треба набирати швидко, тому вона повинна мати мало символів. Але таблиця символів ASCII має невелику кількість символів, а кількість команд EMACS дуже велика.
Використання комбінацій клавіш клавіатури дозволяє розширити таблицю символів ASCII для набору команд. Текстовий редактор EMACS використовує розширену таблицю ASCII.
Розглянемо команду EMACS „CTRL-h k”. Вона дозволяє одержати довідку про обрану команду EMACS. Символи „CTRL-h” набирають послідовно. Але клавішу „CTRL” не відпускають поки не буде натиснута клавіша „h”, на це вказує риска „-”. Символ „k” набирають після „CTRL-h”.
Комбінації клавіш застосовують наступні символи:
- модифікатори (керуючі символи з таблиці ASCII). У нашому прикладі - „CTRL”;
- додаткові керуючі символи(символи, що друкуються з таблиці ASCII. EMACS використовує їх, як керуючі). У нашому прикладі - „h”;
- символи, що друкуються. У нашому прикладі - „k”.
Кожна клавіша клавіатури має свій номер - SCAN код. При вводі друкованого символу з клавіатури він відображується двома байтами у буфері клавіатури. Молодший байт містить SCAN код клавіші, яка відповідає символу. Старший байт містить 0, що означає клавіші Shift/Ctrl/Alt/Win/Capslock не натиснуті.
Для комбінації клавіш старший байт описує, яка натиснута керуюча клавіша. Опис старшого байту по бітам подано нижче:
7 6 5 4 3 2 1 0 Усі біти = 0, а саме
0 0 0 0 0 0 0 0 вводиться друкований символ
| | | ^---- Комбінація Shift + Caps Lock = 1
| | ^------ Натиснута клавіша Ctrl
| ^--------- Натиснута клавіша Alt
^----------- Натиснута клавіша Win.
Комбінація керуючого символу разом з друкованим дає розширений код, дивися Таблицю 4.3.
Таблиця 4.3 Розширені коди для комбінацій клавіш у 16-річному коді
SCAN код | Код вводу для клавіш |
"A" | |
Shift-A | |
Ctrl-A | |
Alt-A | |
Win-A | |
Ctrl–Shift-A | |
Ctrl-Alt-Shift-A |
Ми розглянули перший спосіб розширення таблиці ASCII Розширити таблицю символів ASCII можна також за рахунок М - біту(останнього біту старшого байту). Такий біт прийнято називати мета-біт. Кожен символ ASCII таблиці може мати свій аналог мета.
Для набору команди М-а використовують мета клавішу. При відсутності мета клавіші можна набрати клавішу ESC. Наприклад, замість клавіш М-а можна набрати ESC-а.
Кожне звертання користувача до операційної системи через натискання клавіші ASCII-термінала, клавіші миші – подія. Подією є також натискання функціональних клавіш F1,F2,…,F12 або стрілки. Події можна модифікувати клавішами модифікаторами.
У командах, що вводяться з клавіатури, застосовують наступні скорочення: С - CTRL; М - ALT або ESC.
Нижче подається декілька корисних команд. Група довідкових команд визначається префіксною командою C-h(help) або F1.
1) Вивести EMACS документацію: C-h t.
2) Вивести зміст EMACS документації: C-h i.
3) Вивести повну довідку за командою: С-h ?. У довідці вказано опції відбору. Вказавши у міні буфері опцію відбору команд можна одержати довідку про групу команд; одержати відомості про ключі; кодування системи; функцій змінних Common Lisp, тощо.
4) Знайти команду в меню: C-h w.
5) Знайти за ключем опис команди: C-h k. Вводиться команда та ім’я ключа в міні буфер. Команда дає повну інформацію про ключ. Наприклад, ключ С-f.
4.4.8 Ключі та команди EMACS
Послідовність набраних символів поєднаних рискою означає одну подію. Символ, який набрано окремо, означає другу подію.
Таким чином команда „C-h w” – означає дві події: звернутись до довідки і знайти, де у меню розташована команда, ім’я якої вказується у міні буфері. Послідовність подій називають ключем. Ключ може бути закінченим – послідовність подій достатня для опису команди. Увід закінченого ключа - запускає команду.
Ключ може бути префіксним. Префіксний ключ вказує на групу команд. Продовження префіксного ключа може зробити ключ закінченим. Обмеження на довжину ключа немає.
Висновок: Команда може складатися з будь-якого числа подій динамічно. Префіксні ключі визначають групу команд.
У EMACS немає списку префіксних ключів. Користувач може утворювати нові префіксні ключі, використовуючи стандартну прив’язку або вилучати старі ключі. Вилучення префіксних ключів впливає на команди групи.
Текстовий редактор має таблиці ключів. Кожна компонента таблиці встановлює зв’язок між ключем(командою користувача) і внутрішньою командою(функцією на мові EMACS LISP). Функція одержує від користувача необхідні дані та передає їх програмі для виконання дій. Програма, що виконує дії також написана на мові LISP.
4.4.9 Міні буфер
Міні буфер використовують, щоб ввести додаткову інформацію для будь-яких команд. Додаткова інформація буде використовуватись функціями Lisp, як фактичні параметри.
Якщо команда вимагає додаткової інформації, то автоматично в області луни з’являється міні буфер і він стає поточним буфером. Міні буфер завжди підказує, що повинен ввести користувач. Підказка закінчується символом „:” та може містити замовчення для відповіді. Наприклад, команда меню FILE/OPEN DIRECTORY підказує каталог по замовчанню.
Користувач вводить інформацію та закінчує увід „ENTER”( у документації „RET” від слова RETURN). По замовченню вводять тільки „ENTER”. Після вводу рядку „ENTER” не натискують, для цього застосовують команду C-j.
При вводі можна застосовувати „Завершення”. Завершення застосовують тоді, коли забули команду або аргумент команди. Завершення означає, що можна ввести перші символи команди і завершити їх пропуском(“ “) або „ENTER”. Редактор EMACS запропонує можливі продовження.
Якщо є один варіант, то натиснувши клавішу ТАБ, команда поповниться автоматично. Наприклад, при вводі команди M-x insert-b, вона автоматично поповниться M-x insert-buffer.
Якщо варіантів багато, оберіть мишкою один варіант та натисніть „ENTER”, команда поповниться та виконається.
При роботі з міні буфером можуть виникнути ситуації, коли міні буфер потрібен для інших цілей. Тоді, міні буфер зберігається, а після вводу користувача повертається.
Усі команди введені у міні буфер зберігаються в списку – історія. Список можна переглянути, рухаючись за стрілками: вверх, вниз. Команди можна застосовувати повторно.
Для скасування команди, яку ви викликаєте, виконайте команду C-g. Після виконання команди міні буфер стає не активним і виконується перехід на верхній рівень.
4.4.10 Команди роботи з текстом
Ми будемо розглядати мінімальний набір команд, що дає можливість працювати з текстовим редактором. Насправді, текстовий редактор EMACS має набагато більше можливостей значно відмінних від можливостей інших редакторів.
ВСТАВКА СИМВОЛІВ
При вводі рядку тексту, довжина якого більше довжини рядка на екрані, зручно включити додатковий режим AUTOFILL. В режимі AUTOFILL довгий рядок автоматично розбивається на два рядка. Додаткові режими включаються за правою кнопкою миші, якщо встановити покажчик миші на основний режим у рядку режиму.
Для перезапису символів треба включити додатковий режим Overwrite. Для вставки у текст керуючого не графічного символу використовують перед його вставкою команду С-q. Командою C-q можна вставити символ, набравши його восьмирічний код. Наприклад, послідовність С-q 60 <Enter>вставляє символ 0. Замість <Enter> може використовуватись будь-який не цифровий символ
ВИЛУЧАННЯ ТЕКСТУ
Вилучити текст можна за командою – С-k. Якщо курсор стоїть на кінці рядку, то команда об’єднує рядки без вилучання.
ВІДМІНА ЗМІН
Всі буфери за винятком тих, імена яких починаються з пропуска, зберігають зміни і їх можна повернути. Команди відміни раніше зміненого тексту EDIT/UNDO або C-x u. При змінах точка повертається до попереднього положення.
Увід іншої команди під час відміни змін може повернути відмінені вами зміни. Наприклад, команда С-f.
Можливо відміняти зміни не у всьому буфері, а тільки у області. Для цього треба встановити курсор лівою кнопкою миші на початок обраної вами області та не відпускаючи кнопку обрати область. Після чого виконати команди відміни.
При дуже великої кількості змін, найстаріші зміни, що зберігаються редактором EMACS вилучаються. Останні зміни ніколи не вилучаються.
Механізмом вилучання у EMACS є механізм збирання сміття. Можна задати кількість байтів, яку відводять для зберігання змін у змінній Undo-Limit. По замовчанню значення змінної 20000 байт.
ФАЙЛИ
Текст буферу зберігається у файлі за опцією меню FILE/ SAVE або FILE/ SAVE AS або командою C-x C-s з вже обраним ім’ям.
Завантажити файл в буфер текстового редактора можна за опцією меню FILE/OPEN FILE або за командою C-x C-f.
Для цього у міні буфер(область луни) виводиться ім’я поточного каталогу та пропонується ввести ім’я файлу. У разі необхідності каталог можна змінити. Якщо вводиться ім’я файлу і у каталозі файл відсутній, то пропонується утворити новий файл та зберегти його за командою FILE/ SAVE AS.
Наявність файлу викликає завантаження його вмісту в буфер для редагування або друку.
ВІДСІК РЯДКІВ
У рядках вікна можна не відображувати всю інформацію. У буфері ця інформація залишається. Опція меню Options/Trancate Long Lines in this Buffer дозволяє переглянути рядок за маркером стрілка. На екран виводиться маркери стрілки. Подивитись інформацію можна за горизонтальною прокруткою. Відключити відсік рядків можна надаючи локальній змінній TRUNCATE-LINES значення NIL.
ЧИСЛОВІ АРГУМЕНТИ
Будь-якій команді EMACS можна передати числовий аргумент. Аргумент називають префіксним, бо він вводиться перед викликом команди. Набрати числовий аргумент можна за командою: ALT-<число> або командою С-u <число>.
Якщо число від’ємне, то дія команди у зворотному напряму.
Різні команди використовують числовий аргумент по різному. Команди можуть використовувати числовий аргумент для повторювання дії. Наприклад, команда ALT-10 C-k вилучить від курсору 10 рядків.
Деякі команди перевіряють тільки наявність аргументу, а не значення. Наприклад, команда ALT-q без числового аргументу заповнює рядок неповними рядками, а з числовим аргументом вирівнює рядок за правою границею.
Числовий аргумент можна використовувати для багатократної вставки символу. Команда С-u <символ> без числового аргументу вставляє в текст 4 символи. Команда С-u С-u <символ> вставляє 16 символів. При застосування числового аргументу у команді вставляється вказана кількість символів. Наприклад, команда „С- u20p” вставляє 20 символів „р”.
ПОВТОРНЕ ВИКОНАННЯ КОМАНДИ
Для повтору тільки що виконаної будь-якої команди застосовують команду C-x z. Команда, що була виконана, застосовує ті ж самі аргументи. Для повторювання команди C-x z треба ввести символ z стільки раз, скільки треба повторити команду.
Наприклад, нехай введено символ „к”. Команда C-x z z добавить ще 2 символу „к”.
ЗАПУСК КОМАНДИ ЗА ІМЕНЕМ
Для запуску команди за іменем треба: набрати М-х; використати міні буфер для вводу імені команди і запуску. При вводі команди можна використовувати завершення.
ПОШУК, ЩО НАРОЩУЄТЬСЯ
Редактор EMACS дозволяє виконувати звичайний пошук, який не нарощується, та пошук, який нарощується. Під текстом ми будемо розуміти: сполучення символів, слово, словосполучення, фрагмент тексту.
Пошук, який нарощується, починається за ще не набраному повністю тексту.Для пошуку вперед треба вказати команду
С-s<текст>. Унизу екрану з’являється вікно пошуку Search з номером пошуку та відображеним текстом. Всі входження тексту відмічаються кольором. Можлива ситуація, при якій знайдено не весь текст, а тільки його частина. Такий текст відмічається також.
Аналогічно шукається текст назад. Набрати команду С-r<текст>.
Якщо у тексті є велика буква, то пошук розрізняє малі та великі букви. При помилці у тексті, що шукається, уживають команду DEL.
Невдача пошуку завершується повідомленням „Failed”. Можна повторити пошук змінивши текст. Повторний пошук завжди починається з початку буферу. Для повторного пошуку знову вживається команда С-s<текст> або С-r<текст>.
Вихід з пошуку за клавішею „ENTER” при невдачі вказує на прийняття невдачі. Вихід з пошуку при невдачі за командами C-q C-q. Команда виходу з пошуку при найденому тексті C-q.
ПОШУК БЕЗ НАРОЩУВАННЯ
Звичайний пошук виконується за командою С-s „ENTER”. Унизу екрана з’являється вікно пошуку Search для набору тексту. Текст закінчується „ENTER”.
Можна набрати відразу дві команди:
С-s „ENTER” С-s Текст „ENTER”.
Після знаходження першого входження тексту курсор встановлюється після нього. Положення курсору відмічається „точкою”. Одержати всі входження тексту після „точки” можна за командами С-s С-s.
БЕЗУМОВНА ЗАМІНА
Команди заміни працюють у буфері від „точки” до кінця буферу. У EMACS існує декілька типів замін.
Команда М-х replace-string <ENTER> замінює існуючий фрагмент тексту на новий фрагмент тексту. Команда опитує у вікні міні буферу: що замінити та чим замінити. Якщо фрагмент тексту, що заміняється, набрано з великою буквою, то регістри різняться.
ЗАМІНА З ПІДТВЕРДЖЕННЯМ
Замінити текст новим текстом можна командою за умовою: ALT-X QUERY-REPLACE.
Команда опитує у вікні міні буферу: що замінити та чим замінити. Залежно від відповіді користувача(чим замінити) можна виконати різні варіанти заміни. Варіанти можна подивитись, якщо ввести „?”.
ТЕМА 5: ОСНОВНІ ПОНЯТТЯ COMMON LISP
5.1 Абстрактні типи даних
Стандарт Common Lisp засновано на абстрактних типах даних, тому внутрішня організація середовища не так важлива. При такому підході тип об’єкту визначається через операції(аксіоми), які можливо виконувати над типом, а не через представлення у оперативній пам’яті. Застосування абстракції типів даних, робить систему типів відкритою для поповнення.
Під типом розуміють множину об’єктів. Один об’єкт може відноситься до декількох типів. На рисунку 5.1 зображено ієрархію типів даних.
Рисунок 5.1-Ієрархія найбільш важливих типів у Common Lisp
З рисунку видно, що об’єкт певного типу є підтипом декількох типів, що розташовані у ієрархії вище. Тип NIL є підтипом будь-якого типу.
Наприклад, об’єкт типу STRING відноситься до типів VECTOR, ARRAY, SEQUENCE. У Common Lisp типи об’єктів не об’являються.
Крім вказаних стандартних типів ми будемо застосовувати: типи асоціативні списки; списки властивостей, структури, атоми, тип покажчик(specifier).
Основні операції на абстрактних об’єктах розподіляються на три класи:
- функції конструктори (будують об’єкт);
- функції відбору (вибирають частину об’єкту, не змінюючи сам об’єкт);
- функції модифікатори (модифікують об’єкт).
Типи даних, що базуються на стандартних типах або раніше визначених користувачем типах, називають складними.
Перевірити, чи є об’єкт вказаного типу можна за функцією TYPEP:
CL-USER> (TYPEP 45 'integer)
T
Функція SUBTYPEP визначає чи є тип підтипом вказаного типу:
CL-USER> (SUBTYPEP ‘Integer ‘Number)
T
Функція TYPE-OF визначає до якого типу відноситься об’єкт і діапазон типу.
CL-USER> (TYPE-OF #\w)
STANDARD-CHAR
5.2 Поняття середовища COMMON LISP і його вміст
При завантаженні системи програмування Common Lisp для її роботи виділяється і структурується певним образом оперативна пам’ять.
Будемо називати глобальним середовищем – поточний стан виділеної і структурованої оперативної пам’яті, який складається з усіх активних на даний момент об’єктів Common Lisp: констант, значень змінних, означень функцій.
Усі дані та функції середовища пов’язані посилками у єдину структуру. Дане, ізольоване від структури, вилучається з середовища механізмом „Збирач сміття”.
Склад середовища змінюється у часі. Опції меню, команди Emacs, функції Common Lisp дозволяють завантажувати у середовище функції користувача та дані з файлів. Користувач може змінювати склад середовища програмно. Простір імен Common Lisp називають лексичним середовищем.
5.2.1 Константи і змінні
Змінні у Common Lisp не мають типів. Змінній можна привласнювати значення будь-якого типу.
Наприклад:
CL-USER> (SETQ S 60)
CL-USER> (SETQ S “Program”)
“Program”
Значенням змінної може бути результат роботи функції, значення іншої змінної або константа.
Типи даних прив’язуються до значень. Тип об’єкту визначається спеціфікаторами (контекстом і формою запису константи). Розглянемо, у яких формах зображуються константи різних типів:
а) #C(2 3) – тип комплексне число 2+і3.
б) 1.2 – тип single-float, форма запису з фіксованою точкою.
в) 2e-2 – single-float, форма запису з точкою, що пливе.
Дата добавления: 2016-09-20; просмотров: 469;