- •Лабораторная работа 1. Тема: Ознакомительная работа в среде Lisp. Базовые функции Лиспа. Символы, свойства символов. Математические и логические функции
- •Основные положения программирования на Лиспе
- •Загрузка системы, системный редактор
- •Функции списков
- •Символы, свойства символов.
- •Математические и логические функции
- •Ход работы:
Символы, свойства символов.
Функции присваивания: 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 ... имяХ значМ)
Пусть имя студент имеет следующий список свойств:
(имя Иван отчество Иванович фамилия Иванов)
Функция 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.
