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

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

ГоловнаІнформатика, Компютерні науки → Примітивні об’єкти даних - Реферат

Примітивні об’єкти даних - Реферат

CDR-елемент - Y.
$ (SETQ A (cons X Y)) $ (CAR A) $ (CDR A) $ (CDR '(R . S))
$ A X Y S
(X . Y)
Задопомогою точкового подання можна показати структуру будь-якого об'єкту. Список (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 до списку буде Т.
Функції властивостей
Розглянемо, як можна працювати зі списком властивостей символа. Його можна по необхідності створювати, обробляти та видаляти. Властивості символа є глобальними, тобто доступними з довільної точки програми, поки вони не будуть явно змінені чи видалені. Використання символа в якості змінної чи імені функції не впливає на список властивостей.
Функції властивостей керують властивостями символів. CDR - елемент символа вказує на список властивостей. Разом з функціями флагів вони полегшують процес побудови динамічних баз даних.
1. (PUT ). У список властивостей кладеться значення відповідно до вказівника .
$ (PUT 'capital 'usa 'washington) $ (SETQ capital 'world)
$ (PUT 'capital 'germany 'bonn) $ (PUT 'world 'ocean 'atlantic)
$ (PUT 'capital 'england 'london)
$ (CDR 'capital)
((ENGLAND . LONDON) (GERMANY . BONN) (USA . WASHINGTON))
$ (CDR capital)
((ocean . atlantic))
$ (CAR 'capital) $ capital
world world
2. (GET ). Повертає значення властивості, яке відповідає відповідно до вказівника . Якщо такого вказівника не існує, то повертається NIL. Якщо змінна capital має властивості, які їй були надані у попередньому прикладі, то:
$ (GET 'capital 'england) $ (GET 'capital 'germany)
london bonn
3. (REMPROP ). Видалення зі списка властивостей властивості, яка відповідає . Повертається старе значення властивості, якщо воно знайдено, та NIL - інакше. Нехай символ capital має три попередні властивості.
(REMPROP 'capital 'germany)
bonn
(REMPROP 'capital 'usa)
washington
(CDR 'capital)
((england . london))
Функції розпізнання
Функції розпізнання - це твердження, які використовуються для розпізнання або ідентифікації об'єктів даних muLisp. Ці функції мають тільки один аргумент, а повертають булеве значення. Вони розпізнають об'єкт, який може мати довільну структуру. Ми вже розглянули деякі функції розпізнання: SYMBOLP, INTEGERP, NUMBERP, ATOM, LISTP, NULL. Розглянемо інші.
(ZEROP ). Повертає Т, якщо obj - число 0.
(PLUSP ). Повертає Т, якщо obj - додатне ціле число.
(MINUSP ). Повертає Т, якщо obj - від'ємне ціле число.
(ODDP ). Повертає Т, якщо obj - непарне ціле число.
(EVENP ). Повертає Т, якщо obj - парне ціле число.
Функція (ASCII ) повертає ASCII-код символа . Функція (ASCII ) повертає символ, ASCII код якого дорівнює числу . Для того, щоб визначити, чи є символ sym літерою, можна використати функцію: (< (ASCII 'a) (ASCII sym) (ASCII 'z)). Оскільки muLisp не розрізняє малі та великі літери, то (ASCII 's) = (ASCII 'S) для будь-якого символа s. Функція ISCHAR розпізнає літери. Для знаходження ASCII кодів символів, які позначають цифри, необхідно використовувати одинарний Escape-символ.
$ (DEFUN ISCHAR (char) $ (ASCII 'f) $ (ASCII 70)
(<= (ASCII 'a) (ASCII char) (ASCII 'z)) ) 70 F
$ (ASCII '9) $ (ASCII 57)
57 9
Наступні функції дають можливість розпізнавати символи та числа.
(ALPHA-CHAR-P ) - повертає T, якщо - літера.
(NUMERIC-CHAR-P ) - повертає T, якщо - цифра.
(ALPHANUMERICP ) - повертає T, якщо - літера або цифра.
$ (ALPHA-CHAR-P W) $ (ALPHA-CHAR-P 3) $ (ALPHA-CHAR-P ~)
T NIL NIL
$ (NUMERIC-CHAR-P W) $ (NUMERIC-CHAR-P 3) $ (NUMERIC-CHAR-P ~)
NIL T NIL
$ (ALPHANUMERICP W) $ (ALPHANUMERICP 3) $ (ALPHANUMERICP ~)
T T NIL
Зазначимо, що символ проміжку (' ' ) є літерою.
Завдання
1. Перевірити, чи складається список лише з:
а) рівних чисел г) додатних та від'ємних малих цілих, які чергуються
б) символів через одне, причому їхня кількість парна
в) від'ємних дробових чисел д) від'ємних парних цілих чисел
2. За допомогою примітивних об'єктів даних створити:
а) збалансоване бінарне дерево висоти 3, листки якого є символами.
б) список з підсписками глибини вкладеності 3, елементами якого є числа.
3. Написати функцію, яка за вхідним списком будує необхідну структуру:
а) '(q w e r t y) -> (q (w (e (r (t (y))))))
б) '(q w e r t y -> ((((((y) t) r) e) w) q)
в) '(q w e r t y) -> ((q) (w) (e) (r) (t) (y))
г) '(q w e r t y) -> ((q w) (e r) (t y))
4. Написати функцію, яка за списком який дано в завданні 3 в другому стовпчику, будує лінійний список.
Відповіді
1. a) $ (DEFUN EQNUM (lst)
((NULL (CDR lst)) T)
((NUMBERP (CAR lst)) ((EQL (CAR lst) (CADR lst)) (EQNUM (CDR lst)))) )
б) $ (DEFUN SYMALL (lst)
((NULL lst) T)
((SYMBOLP (CAR lst)) (SYMALL (CDR lst))) )
в) $ (DEFUN DRIBVID (lst)
((NULL lst) T)
((EQL (CDAR lst) SPECIAL) (DRIBVID (CDR lst))) )
г) $ (DEFUN MINT (lst)
((NULL lst) T)
((NULL (CDR lst)) NIL)
((NOT (CDAR lst)) ((CDADR lst) (MINT (CDDR lst)))) )
д) $ (DEFUN VIDPAR (lst)
((NULL lst) T)
((EVENP (CAR lst)) ((MINUSP (CAR lst)) (VIDPAR (CDR lst)))) )
2. a) (((q . w) . (e . r)) . ((t . y) . (u . i)))
б) ((((q) . w) . r) . t)
3. a) $ (DEFUN ON1 (lst)
((ATOM (CDR lst)) (CONS (CAR lst) NIL))
(CONS (CAR lst) (CONS (ON1 (CDR lst)) NIL)) )
б) $ (DEFUN ON2 (lst)
((ATOM (CDR lst)) (CONS (CAR lst) NIL))
(CONS (ON2 (CDR lst)) (CAR lst)) )
в) $ (DEFUN ON3 (lst)
((ATOM (CDR lst)) (CONS (CONS (CAR lst) NIL) NIL))
(CONS (CONS (CAR lst) NIL) (ON3 (CDR lst))) )
г) $ (DEFUN ON4 (lst)
((ATOM (CDDR lst))(CONS (CONS (CAR lst) (CONS (CADR lst) NIL)) NIL))
(CONS (CONS (CAR lst) (CONS (CADR lst) NIL)) (ON4 (CDDR lst))) )
4. a) $ (DEFUN RON1 (lst)
((NULL lst) NIL)
(CONS (CAR lst) (RON! (CADR lst))) )
б) $ (DEFUN RON2 (lst)
((ATOM (CAR lst)) lst)
(CONS (CADR lst) (RON2 (CAR lst))) )
в) $ (DEFUN RON3 (lst)
((NULL lst) NIL)
(CONS (CAAR lst) (RON3 (CDR lst))) )
г) $ (DEFUN RON4 (lst)
((NULL lst) NIL)
(CONS (CAAR lst) (CONS (CADAR lst) (RON4 (CDR lst)))) )
Loading...

 
 

Цікаве