(cons ‘а 2) возвращает
(reverse
(reverse '((a) b c)) возвращает
(subst
(setq sample ‘(a b (с d) b))
(subst ‘qq ‘b sample) возвращает
(subst ‘qq ‘(c d) sample) возвращает
(subst ‘qq ‘x sample) возвращает
(length
(length ‘(a b с d)) возвращает 4,
(length ‘(a b (с d))) возвращает 3,
(length ‘()) возвращает 0.
(mapcar
(setq a 10 b 20 с 30)
(mapcar '1+(list a b c)) возвращает
т.е., использование функции mapcar эквивалентно использованию последовательно трех выражений:
(1+a),
d+b),
(1+c).
5.2. Извлечение данных из списка
Двумя основными функциями, позволяющими извлечь из списка хранящиеся в нем данные, являются car и cdr.
(car
(car ‘(a b c)) возвращает
(car ‘((a b) c)) возвращает
(car ‘()) возвращает
(cdr список). Функция возвращает список, за исключением первого элемента. Если список пуст, возвращается
(cdr ‘(a b c)) возвращает
(cdr ‘((a b) c)) возвращает
(cdr ‘()) возвращает
Следует иметь в виду, что функция cdr возвращает список, поэтому при попытке извлечь с ее помощью координату “у” двумерной точки может возникнуть конфликтная ситуация. Действительно,
(cdr '(x y)) возвращает
и из этого списка, состоящего из одного элемента, нужно этот элемент извлечь, т.е., совершить операцию:
(car ‘(у)).
Таким образом, извлечение координаты “у” должно быть осуществлено следующей операцией:
(саг (cdr ‘(х у))).
Для вкладываемых друг в друга функций car и cdr используется сокращенная запись:
(cadr
(caar
(cadar
и так далее. Полная глубина проникновения сцепленных функций car - cdr в обрабатываемый список достигает четырех уровней. Охватывающие крайние возможности метода функции выглядят как (caaaar) и (cddddr). Полный перечень функций можно найти в соответствующей литературе [5, 6].
В качестве примера приводится последовательное извлечение координат точки в трехмерном пространстве:
(setq pt ‘(3.2 5.6 8.4))
(car pt) возвращает
(cadr pt) возвращает
(caddr pt) возвращает
Ранее упоминалось об особом виде списка - точечной паре. Это единственный вид списка, из которого функция cdr извлекает не список, а атом. Например, из точечной пары (62 . 2)
(car (62 . 2)) возвращает
(cdr (62 . 2)) возвращает
(member
(member ‘с ‘(a b с d e)) возвращает
(member ‘q ‘(a b с d e)) возвращает
(nth
(nth 2 ‘(a b с d e)) возвращает
(nth 5 ‘(a b с d e)) возвращает
Следует иметь в виду, что первому элементу списка соответствует нулевой номер.
(assoc
(setq a ‘((name box) (width 3) (size 4.7) (depth 5)))
(assoc ‘size a) возвращает
(assoc ‘length a) возвращает
6. РАБОТА С БАЗОЙ ДАННЫХ ЧЕРТЕЖА
Процесс создания чертежа сводится в конечном итоге к выполнению множества отдельных операций с примитивами. Все эти операции могут осуществляться программным путем, для чего Автолисп использует ряд функций, призванных создавать графические объекты, извлекать из базы данных чертежа необходимые сведения о примитивах, комплектовать наборы объектов и готовить, таким образом, исходные данные для выполнения дальнейших действий. Часть информации хранится в базе данных чертежа в виде таблиц (имена блоков, слоев, типов линий и т.п.). Далее рассматриваются наиболее употребительные функции, способствующие обработке характеристик примитивов и содержания таблиц.
6.1. Характеристики примитивов