Реферат: Примітивні об єкти даних
Название: Примітивні об єкти даних Раздел: Рефераты по астрономии Тип: реферат | ||||||
Реферат на тему:Примітивні об’єкти даних Примітивними об’єктами
даних є символи
, числа
та конси
. muLisp має безліч функцій розпізнання, порівняння, комбінування та обробки цих об’єктів. Це дозволяє конструювати будь-які складні об’єкти даних. Як було сказано раніше, muLisp має два типи даних: атоми
та списки
. Атоми поділяються на символи та числа. Списки є підмножиною об’єктів, які мають більш загальну структуру — бінарне дерево. Вони створені за допомогою консів. В Коммон Ліспі (файл common.lsp) визначені функції SYMBOL-VALUE, яка повертає значення символа, та функція SYMBOL-PLIST, яка повертає весь список властивостей символа. (DEFUN SYMBOL-VALUE (SYM) (DEFUN SYMBOL-PLIST (SYM)((SYMBOLP SYM) (CAR SYM) ) ) ((SYMBOLP SYM) (CDR SYM) ) )Узагальненою функцією присвоєння є SETF, яка визначена в common.lsp. Вона заносить данні в комірку пам’яті символа: (SETF <комірка пам’яті> <значення>). Через функцію SETF можна представити описані раніше функції SET та SETQ. (SETQ x y) це (SETF x y)(SET x y) це (SETF (SYMBOL-VALUE x) y)Проміжки, дужки, коми, одинарні та подвійні лапки, крапка, крапка з комою відіграють спеціальну роль в Ліспі. Одинарним Escape-символом є \. Багатократним Еscape-символом є |. Спеціальні літери можуть використовуватися у PRINT-іменах символів, але для цього перед ними треба ставити \, або весь рядок брати в |. Вирази |q w e| та |sym(bol| є символами. Для використання літер \ та | в символах необхідно ставити перед ними \. Якщо виводиться на екран символ, який містить спеціальні літери, то він виводиться з багатократним escape-символом. Програмна змінна *PRINT-ESCAPE* булевського типу відповідає за виведення escape-символів. Якщо вона дорівнює NIL, то escape-символи на екран не виводяться. Подвійні лапки " грають роль літери |. Розглянемо приклади (спочатку *PRINT-ESCAPE*=T): $ (SETQ |sym(bol| 3) $ (SETQ a |q w e|) $ s\a $ s\\a$ |sym(bol| $ a sa |s\\a||3 |q w e| $ (SETQ *PRINT-ESCAPE* NIL) $ (SETQ a |q w e|) $ (SETQ "s\\a" 2)$ s\\a $ a $ |s\\a|s\a q w e 2Число
є іншим примітивним об’єктом. Воно може бути цілим або дробовим. Ціле число вводиться як послідовність цифр, перед якою може стояти знак мінус. За внутрішнім поданням цілі числа діляться на малі цілі (до 65536) та великі цілі. Оскільки значенням числа завжди є саме число, то немає необхідності перед ним ставити апостроф. Чотири атрибути характеризують число як об’єкт даних: Значення атрибута знака доступне як CDR-елемент числа. Дробові числа можуть подаватися у десятковому вигляді та з дробовою рискою. Внутрішня змінна *PRINT-POINT* відповідає за тип виведення дробових чисел. Якщо вона дорівнює NIL, то всі дробові числа подаються на виведення з дробовою рискою. Якщо *PRINT-POINT* = n, то дробові числа виводяться з n знаками після десяткової коми. При введенні дробового числа воно автоматично скорочується. $ 3/4 $ 3/9 $ 5/1 $ 12/93/4 1/3 5 4/3Внутрішня змінна *PRINT-BASE* відповідає за основу системи числення, в якій обробляються числа. Якщо значення цієї змінної є цілим та перебуває в інтервалі від 2 до 32, то такою і буде основа системи числення, інакше muLisp працює в десятковій системі числення. $ (SETQ ten 10) $ (SETQ *PRINT-BASE* 2) $ 234$ (SETQ *PRINT-BASE* 16) $ ten 11101010$ ten 10100AФункцією, яка розпізнає цілі числа, є INTEGERP. Вона повертає Т, якщо її аргумент є цілим числом та NIL інакше. Функція NUMBERP розпізнає число. $ (INTEGERP 100) $ (INTEGERP 3.5)T NIL$ (NUMBERP 3.5) $ (NUMBERP 4/5)T TЧисло в подвійних лапках завжди є символом: $ (SYMBOLP "23") $ (NUMBERP "23")T NILСимволи та числа є атомами. Наступні вирази повертають істину: (ATOM 3.5), (ATOM "23"), (ATOM ‘APPLE). За допомогою точкового подання можна показати структуру будь-якого об’єкту. Список (x1 x2 x3) є ланцюгом консів, які зв’язані за допомогою CDR- елементів. Його CAR- елементи вказують на елементи списку. CDR- елемент останнього конса вказує на NIL. Вказаний список можна подати у вигляді (x1 . (x2 . (x3 . NIL))). Функція READ читання виразу розпізнає як точкове подання виразу, так і спискове. Функція виведення PRINT виводить об’єкти в списковому поданні. $ (SETQ a ‘(q . (w . nil)) $ a $ (CONSP ‘(q . w)) $ (CONSP (q w))(q w) (q w) T TФункція (CONSP obj) розпізнає конси. Список не є примітивним об’єктом, а є ланцюгом консів. Отже, результатом застосування функції CONSP до списку буде Т. Функції властивостей Розглянемо, як можна працювати зі списком властивостей
символа. Його можна по необхідності створювати, обробляти та видаляти. Властивості символа є глобальними, тобто доступними з довільної точки програми, поки вони не будуть явно змінені чи видалені. Використання символа в якості змінної чи імені функції не впливає на список властивостей. 2. (GET символ ключ ). Повертає значення властивості, яке відповідає символу відповідно до вказівника ключ . Якщо такого вказівника не існує, то повертається NIL. Якщо змінна capital має властивості, які їй були надані у попередньому прикладі, то: $ (GET ‘capital ‘england) $ (GET 'capital 'germany)london bonn3. (REMPROP символ ключ ). Видалення зі списка властивостей символа властивості, яка відповідає ключу . Повертається старе значення властивості, якщо воно знайдено, та NIL – інакше. Нехай символ capital має три попередні властивості. (REMPROP ‘capital ‘germany)bonn(REMPROP ‘capital ‘usa)washington(CDR ‘capital)((england . london))Функції розпізнання Функції розпізнання
— це твердження, які використовуються для розпізнання або ідентифікації об’єктів даних muLisp. Ці функції мають тільки один аргумент, а повертають булеве значення. Вони розпізнають об’єкт, який може мати довільну структуру. Ми вже розглянули деякі функції розпізнання: SYMBOLP, INTEGERP, NUMBERP, ATOM, LISTP, NULL. Розглянемо інші. Наступні функції дають можливість розпізнавати символи та числа. Зазначимо, що символ проміжку (‘ ‘ ) є літерою. Завдання1. Перевірити, чи складається список лише з:
4. Написати функцію, яка за списком який дано в завданні 3 в другому стовпчику, будує лінійний список. |