Структурированные типы данных.
Списки (ассоциативные). Ассоциативный список или просто а-список - состоит из точечных пар, поэтому его также называют списком пар. ((a1. t1) (a2. t2)... (an. tn))
Первый элемент пары называют ключом а второй - связанными с ключом данными. Обычно ключом является символ. связанные с ним данные могут быть символами, списками или какими не будь другими лисповскими объектами. В работе со списками пар нужно уметь строить списки, искать данные по ключу и обновлять их. PAIRLIS. Функция PAIRLIS строит а-список из списка ключей и списка, сформированного из соответствующих им данных. Третьим аргументом является старый а-список, в начало которого добавляются новые пары: (PAIRLIS ключи данные а-список)
_(SETQ спис ‘(один. Иванов)) ð (один. Иванов) _(SETQ спис (PAIRLIS ‘(три два) ‘(Петров Сидоров) спис)) ð ((три. Петров) (два. Сидоров) (один. Иванов))
ASSOC. Ассоциативный список можно считать отображением из множества ключей в множество значений. Данные можно получить с помощью функции (ASSOC ключ а-список)
которая ищет в списке пар данные, соответствующие ключу, сравнивая искомый ключ с ключами пар слева направо.
_(ASSOC ‘три спис) ð (три. Петров)
ACONS. Ассоциативный список можно обновлять и использовать в режиме стека. Новые пары добавляются к нему только в начало списка, хотя в списке уже могут быть данные с тем же ключом. Это осуществляется функцией ACONS: (ACONS x y а-список) Поскольку ASSOC просматривает список слева направо и доходит лишь до первой пары с искомым ключом, то более старые пары как бы остаются в тени более новых.
Строки. Строка состоит из последовательности знаков. В строке знаки записываются в последовательности друг за другом, для ограничения которой с обеих сторон в качестве ограничителя используется знак «».
При вводе строки в интерпретаторе, в качестве результата получаем ту же строку. CHAR. Произвольный элемент строки можно прочитать (т. е. сослаться на него с помощью индекса) функцией CHAR: (CHAR строка n)
(CHAR «строка» 0) ð \с;индексация начинается с 0 Сравнение строк.
(STRING= строка1 строка2) (STRING< строка1 строка2) (STRING> строка1 строка2) (STRING/= строка1 строка2)
Массивы. Для работы с массивами в MuLisp необходимо загрузить файл ARRAY.LSP. Массивы создаются формой: (MAKE-ARRAY (n1 n2... nN) режимы)
Функция возвращает в качестве значения новый объект - массив. n1, n2,... nN - целые числа, их количество N отражает размерность массива, а значения - размер по каждой размерности. Необязательными аргументами можно задать тип элементов массива, указать их начальные значения или придать самому массиву динамический размер. Общий размер массива в этом случае знать и закреплять не обязательно. Для вычислений, осуществляемых с массивами, наряду с функцией создания массива используются функции для выборки и изменения элементов массива. Ссылка на элемент N-мерного массива осуществляется с помощью вызова: (ARREF массив n1 n2...nN)
n1, n2,..., nN - координаты, или индексы, элемента, на который ссылаются. В качестве функции присваивания используется обобщенная функция присваивания SETF.
_(SETQ мас (MAKE-ARRAY ‘(5 4) :ELEMENT-TYPE ‘ATOM :INITIAL-ELEMENT A)) ð (ARRAY ((A A A A)... (A A A A) (5 6))) _(SETF (AREF мас 0 1) B) ð B _мас ð (ARRAY ((A B A A)... (A A A A)))
Структуры. Для объединения основных типов данных (чисел, символов, строк, массивов) в комплексы, отображающие предметы, факты используется составной тип, который называется структурами. Определение структурного типа осуществляется с помощью макроса DEFSTRUCT, формой которого является
(DEFSTRUCT класс-структур поле1 поле2 ...)
Определим структурный тип БАЗА состоящий из компонент ПРОФИЛЬ, ПЛОЩ и ВМЕСТИМ:
_(DEFSTRUCT база профиль площ вместим) ð БАЗА
Для каждого нового типа данных генерируется начинающаяся с MAKE- функция создания структуры данного типа. Например объект типа БАЗА можно создать и присвоить переменной БАЗА1 следующим вызовом:
_(SETQ БАЗА1 (MAKE-БАЗА))
Полю с помощью ключевого слова, которым является имя поля с двоеточием перед ним, присвоить при создании начальное значение. Вызов MAKE-БАЗА возвращает в качестве значения созданную структуру. Для копирования структуры генерируется функция, начинающаяся с COPY- (COPY-БАЗА). Для каждого поля определяемой структуры создается функция доступа, имя которой образуется написанием после имени типа через тире имени поля, например:
_(БАЗА-ПРОФИЛЬ x)
Вызов возвращает значение поля ПРОФИЛЬ для БАЗЫ, задаваемой структурой x. Для присваивания значений полям структуры используется обобщенная функция присваивания SETF:
_(SETF (БАЗА-ПРОФИЛЬ БАЗА1) ОВОЩ) ð ОВОЩ
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|