- •Утверждено
- •Программирование на языке AutoLisp
- •1. Переменные языка AutoLisp
- •1.1 Системные переменные пакета AutoCad
- •1.2 Переменные языка AutoLisp определенные пользователем
- •2. Типы данных языка AutoLisp
- •3. Функции присвоения
- •4.2 Работа со строками, функции преобразования, проверки типов данных.
- •4.3 Логические функции Автолиспа.
- •5. Работа со списками
- •6. Использование функции get для ввода данных.
- •7. Работа с геометрическими описаниями объектов
- •8. Условное ветвление программ
- •9. Организация циклов
- •10. Вызов команд Автокада из программы на языке AutoLisp
- •11. Управление отображением
- •12. Вывод данных в командную строку
- •13. Файловый ввод - вывод
- •14. Определение функции
- •15. Отладка программы.
- •16. Доступ к примитивам и средствам Автокада
- •Функции AutoLisp Математические функции
- •Логические функции Автолиспа.
- •Работа со списками
- •Использование функции get для ввода данных.
- •Работа с геометрическими описаниями объектов
- •Условное ветвление программ
- •Организация циклов
- •Вызов команд Автокада из программы на языке AutoLisp
- •Управление отображением
- •Вывод данных в командную строку
- •Файловый ввод - вывод
- •Доступ к примитивам и средствам Автокада
- •Insert (block)
- •Vertex (pline)
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).