Введение в Автолисп | страница 22



.


(reverse список). Функция обращает список, располагая его элементы в обратном порядке.


(reverse '((a) b c)) возвращает (С В (A)).


(subst новый_элемент старый_элемент список). Функция отыскивает в списке старый_элемент и возвращает копию списка, в которой старый_элемент заменен новым. Если старый_элемент в списке отсутствует, список возвращается без изменений.


(setq sample ‘(a b (с d) b))

(subst ‘qq ‘b sample) возвращает (A QQ (С D) QQ),

(subst ‘qq ‘(c d) sample) возвращает (A B QQ В),

(subst ‘qq ‘x sample) возвращает (A B (C D) B).


(length список) возвращает число элементов в списке.


(length ‘(a b с d)) возвращает 4,

(length ‘(a b (с d))) возвращает 3,

(length ‘()) возвращает 0.


(mapcar функция список1 ... списокN). Функция mapсаr просматривает списки, совершает над ними операции, предписанные функцией и возвращает результат.


(setq a 10 b 20 с 30)

(mapcar '1+(list a b c)) возвращает (11 21 31),


т.е., использование функции mapcar эквивалентно использованию последовательно трех выражений:


(1+a),

d+b),

(1+c).


5.2. Извлечение данных из списка

Двумя основными функциями, позволяющими извлечь из списка хранящиеся в нем данные, являются car и cdr.

(car список). Функция возвращает первый элемент списка. Если список пуст, возвращается nil.


(car ‘(a b c)) возвращает А,

(car ‘((a b) c)) возвращает (А В),

(car ‘()) возвращает nil.


(cdr список). Функция возвращает список, за исключением первого элемента. Если список пуст, возвращается nil.


(cdr ‘(a b c)) возвращает (В С),

(cdr ‘((a b) c)) возвращает (С),

(cdr ‘()) возвращает nil.


Следует иметь в виду, что функция cdr возвращает список, поэтому при попытке извлечь с ее помощью координату “у” двумерной точки может возникнуть конфликтная ситуация. Действительно,


(cdr '(x y)) возвращает (Y),


и из этого списка, состоящего из одного элемента, нужно этот элемент извлечь, т.е., совершить операцию:


(car ‘(у)).


Таким образом, извлечение координаты “у” должно быть осуществлено следующей операцией:


(саг (cdr ‘(х у))).


Для вкладываемых друг в друга функций car и cdr используется сокращенная запись:


(cadr список) эквивалентно (car (cdr список)),

(caar список) эквивалентно (car (car список)),

(cadar список) эквивалентно (car (cdr (car список)))


и так далее. Полная глубина проникновения сцепленных функций car - cdr в обрабатываемый список достигает четырех уровней. Охватывающие крайние возможности метода функции выглядят как (caaaar) и (cddddr). Полный перечень функций можно найти в соответствующей литературе [5, 6].