Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METHOD / Основы САПР / AutoLISP2006.doc
Скачиваний:
85
Добавлен:
05.03.2016
Размер:
1.04 Mб
Скачать

5. Работа со списками

Как уже отмечалось, список - это группа элементов любого допустимого в языке AutoLisp типа. Список может содержать любое количество действительных и целых чисел, строк, переменных или других списков. Все, что находится между открывающей и закрывающей круглыми скобками, - список. Списки удобно использовать для организа-ции и обработки больших массивов связанных данных.

(list выражение1 выражение2 . . .)

Эта функция просто составляет список из своих аргументов. Например, выражение (list 5.5 8.0) возвращает список, содержащий два действительных числа, например координаты точки. Этот способ часто используется в AutoLISP для создания новых точек из известных координат.

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

(car список)

Возвращает первый элемент списка. Если список пуст. возвращается nil.

Например: (setq sp (list 6 “SAPR” 100))

(setq sp0 (car sp)) переменной sp0 будет присвоено значение целого числа 6.

(cdr список)

Возвращает все элементы списка, кроме первого. Если список пуст, возвращается nil.

(setq sp_d (cdr sp)) - переменной sp_d будет присвоено значение списка ( “SAPR” 100).

(nth номер список)

Извлекает элемент списка с нужным номером. Следует учитывать, что первый элемент списка имеет номер 0, а не 1 т.е. функция NTH считает 0, 1, 2, 3, . . . , (setq sp1 (nth 1 sp)) - переменной sp1 будет присвоено значение строковой константы “SAPR”.

(last список)

Возвращает последний элемент списка, причем список не должен быть равен nil.

(reverse список)

Возвращает список с элементами, переставленными в обратном порядке.

Например, (setq sp (reverse sp)) - переменной sp будет присвоено новое значение списка

( 100 “SAPR” 6).

(length список)

Возвращает целое число, равное числу элементов в списке

(setq n_n (length sp)) - переменной n_n будет присвоено значение 3.

(append список1 список2 . . .)

Берет любое число списков и объединяет их в один список.

Например: (setq sp1 (list “PGTU” 20 50.5))

(setq sp2 (list 345.66 (list “a” “b”)))

(setq sp (append sp1 sp2)) - переменной sp будет присвоено значение списка (“PGTU” 20 50.5 345.66 (“a” “b”)).

(cons выражение список)

Эта функция, наряду с функцией LIST, используется для создания списков.Она добавляет в начало списка новый элемент, которым может быть как список так и выражение. Например: (setq spp (list “tm” 20 32))

(setq spp_new (cons “all” spp)) - переменной spp_new будет присвоено значение списка ( “all” “tm” 20 32).

Возможно не создавать новый список, а просто добавить новый элемент к нему:

(setq spp (cons “all” spp)) - список spp получил новый элемент “all”, переменная spp принимает вид - ( “all” “tm” 20 32).

Кроме этих простейших функций существуют функции ASSOC и SUBST, позволяю-щие работать со структурированными списками, подобно структурам в других языках программирования. Работа со структурированными списками рассматривается ниже, при разборе работы с графической базой данных Автокада.

Существует возможность при помощи списков конструировать выражения прямо в процессе выполнения программы, изменяя таким образом ход вычислений. Для этой цели существуют функции APPLY и MAPCAR, которые выполняют эти действия с помощи функции копирования (quote).

(apply функция список)

Указанная функция применяется к списку. При помощи этой функции можно изме-нять тип производимого действия или подставлять одной и той же функции различные данные в процессе выполнения программы.

Например: (setq apl (apply - (list 35,5 15))) - переменной apl будет присвоено значение действительного числа 20.5=35.5-15

(setq sttr (list “S” “A” “P” “R”))

(setq apll (apply strcat sttr)) - переменной apll будет присвоено значение строковой константы “SAPR”.

(mapcar функция список)

Над всеми элементами списка можно проделать одну и ту же операцию - это можно осуществить при помощи функции MAPCAR, причем если требуется обработать несколько отдельных переменных, то список можно сконструировать прямо при обращении к MAPCAR (например, при помощи функции LIST). Возвращает результат выполнения функции над отдельными элементами списка.

Например: (setq vp0 (mapcar 1+ (list 354 13.6))) - переменной vp будет присвоено значение списка ( 355 14.6).

(setq vp1 (mapcar ‘- (list 34.5 46) (list 40 13.5))) - переменной vp1 будет присвоено значение списка ( -5.5 32.5).

Соседние файлы в папке Основы САПР