Реферат на тему: Функції властивостей Функції властивостей призначені для керування властивостями, пов’язаними із символами. CDR - елемент символа вказує на список властивостей, який містить властивості та прапорці (див. розділ ?????). Список властивостей - це ASSOC-список (ASSOCiation) ключей властивостей, об’єднаних у пари зі значеннями властивостей (див. Опис ASSOC у розділі 4.1). Оскільки прапорці - це атоми у списку властивостей, вони можуть відрізнятися від властивостей. Функції властивостей та прапорців полегшують процес побудови динамічних баз даних, з яких інформація може легко та швидко вибиратися. Розглянемо, як можна працювати зі списком властивостей символа. Його можна по необхідності створювати, обробляти та видаляти. Властивості символа є глобальними, тобто доступними з довільної точки програми, поки вони не будуть явно змінені чи видалені. Використання символа в якості змінної чи імені функції не впливає на список властивостей. Функції властивостей керують властивостями символів. CDR - елемент символа вказує на список властивостей. Разом з функціями флагів вони полегшують процес побудови динамічних баз даних. 1. (PUT <символ> <ключ> <об’єкт>). У список властивостей <символа> кладеться значення <об’єкта> відповідно до вказівника <ключ>. (DEFUN PUT (SYM KEY OBJ) ((NULL (ASSOC KEY (CDR SYM))) (RPLACD SYM (ACONS KEY OBJ (CDR SYM))) OBJ) (RPLACD (ASSOC KEY (CDR SYM)) OBJ) OBJ) $ (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. (DEFUN GET (SYM KEY) ((NULL (ASSOC KEY (CDR SYM))) NIL) (CDR (ASSOC KEY (CDR SYM))) ) Якщо змінна capital має властивості, які їй були надані у попередньому прикладі, то: $ (GET ‘capital ‘england) $ (GET 'capital 'germany) london bonn 3. (REMPROP <символ> <ключ>). Видалення зі списка властивостей <символа> властивості, яка відповідає <ключу>. Повертається старе значення властивості, якщо воно знайдено, та NIL – інакше. (DEFUN REMPROP (SYM KEY) ((ATOM (CDR SYM)) NIL) ((EQUAL (CAADR SYM) KEY) (SETQ KEY (CDADR SYM)) (RPLACD SYM (CDDR SYM)) KEY ) (REMPROP (CDR SYM) KEY) ) Нехай символ capital має три попередні властивості. (REMPROP ‘capital ‘germany) bonn (REMPROP ‘capital ‘usa) washington (CDR ‘capital) ((england . london)) 4.2. Функції розпізнання Функції розпізнання — це твердження, які використовуються для розпізнання або ідентифікації об’єктів даних muLisp. Ці функції мають тільки один аргумент, а повертають булеве значення. Вони розпізнають об’єкт, який може мати довільну структуру. Ми вже розглянули деякі функції розпізнання: SYMBOLP, INTEGERP, NUMBERP, ATOM, LISTP, NULL. Розглянемо інші. (ZEROP obj). Повертає Т, якщо obj — число 0. (PLUSP obj). Повертає Т, якщо obj — додатне ціле число. (MINUSP obj). Повертає Т, якщо obj — від’ємне ціле число. (ODDP obj). Повертає Т, якщо obj — непарне ціле число. (EVENP obj). Повертає Т, якщо obj — парне ціле число. Функція (ASCII sym) повертає ASCII-код символа sym. Функція (ASCII num) повертає символ, ASCII код якого дорівнює числу num. Для того, щоб визначити, чи є символ 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 <obj>) – повертає T, якщо <obj> – літера. (NUMERIC-CHAR-P <obj>) – повертає T, якщо <obj> – цифра. (ALPHANUMERICP <obj>) – повертає T, якщо <obj> – літера або цифра. $ (ALPHA-CHAR-P W) $ (ALPHA-CHAR-P \3) $ (ALPHA-CHAR-P ~) T NIL NIL $ (NUMERIC-CHAR-P W) $ (NUMERIC-CHAR-P \3) NIL T $ (NUMERIC-CHAR-P ~) $ (ALPHANUMERICP W) NIL T $ (ALPHANUMERICP \3) $ (ALPHANUMERICP ~) T NIL Зазначимо, що символ проміжку (‘ ‘ ) є літерою. |