Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота 1_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
52.74 Кб
Скачать
  1. Символи, властивості символів.

  • Функції присвоювання: SET, SETO, SETF.

  • Функція SET привласнює символу або зв'язує з ним деяке значення. Причому вона обчислює обидва своїх аргументів. Установлений зв'язок дійсний до кінця роботи, якщо цьому імені не буде привласнене нове значення функцією SET.

(SET 'a '(b з d))  (b з d)

a  (b з d)

(SET (CAR a) (CDR (e f g))  (f g)

a  (b з d)

(CAR a)  b

b  (f g)

  • Функція SETQ зв'язує ім'я, не обчислюючи його. Ця функція відрізняється від SET тим, що обчислює тільки другий аргумент.

(SETQ d '(l m n)) = (l m n)

  • Функція SETF – узагальнена функція присвоювання. SETF використоується для занесення значення в комірку пам'яті.

(SETF чарунки пам'яті - значення)

  • Властивості символу.

У Лиспі із символом можна зв'язати іменовані властивості. Властивості символу записуються в збережений разом із символом список властивостей. Властивість має ім'я й значення. Список властивостей може бути порожній. Його можна змінювати або видаляти без обмежень.

(ім'я1 знач1 ім'я2 знач2 ... имях знач n)

Нехай ім'я студент має наступний список властивостей:

(ім'я Іван по батькові Іванович прізвище Іванов)

  • Функція GET повертає значення властивості, пов'язаного із символом.

(GET символ властивість)

При відсутності властивості функція GET повертає NIL як відповідь.

  • Присвоювання й видалення властивостей.

Для присвоювання символу властивостей в MnLisp / Common Lisp окремої функції немає. Для цього використовуються вже відомі функції:

(SETF (GET символ властивість) значення)

Видалення властивості і його значення здійснюється псевдофункцією REMPROP.

Ця функція повертає як значення ім'я властивості, що видаляє. Якщо властивості, що видаляється, немає, то повертається NIL.

(REMPROP символ властивість)

Для перегляду всього списку властивостей використовують функцію SYMBOL- PLIST. Значенням функції є весь список властивостей.

(SYMBOL-PLIST 'СИМВОЛ)

(SYMBOL-PLIST 'студент) результат (ім'я Іван по батькові Іванович прізвище Іванов)

Програма:

(write (setf (get 'books'title) '(Gone with the Wind)))

(write (setf (get 'books 'author) '(Margaret Michel)))

(write (setf (get 'books 'publisher) '(Warner Books)))

Результат:

(GONE WITH THE WIND)

(MARGARET MICHEL)

(WARNER BOOKS)

Програма:

(setq s1 (cons '(a b) NIL))

(setq s2 (cons '(a b) NIL))

(setf (get 's1 'a) 10)

(setf (get 's1 'b) 20)

(setq spisok (list s1 s2))

(write (symbol-plist 's1))

Програма:

(setf (get 'books 'title) '(Gone with the Wind))

(setf (get 'books 'author) '(Margaret Micheal))

(setf (get 'books 'publisher) '(Warner Books))

(write (get 'books 'title))

(write (get 'books 'author))

(write (get 'books 'publisher))

Результат:

(GONE WITH THE WIND)

(MARGARET MICHEAL)

(WARNER BOOKS)

Програма:

(setf (get 'annie 'age) 43)

(setf (get 'annie 'job) 'accountant)

(setf (get 'annie 'sex) 'female)

(setf (get 'annie 'children) 3)

(write (symbol-plist 'annie))

(remprop 'annie 'age)

(write (symbol-plist 'annie))

Результат:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)

Властивості символів незалежно від їхніх значень доступні із всіх контекстів поки не будуть явно змінені або вилучені. Зміна значення символу не впливає на інші властивості. Властивості символу передаються іншому символу за допомогою функції SETQ.