- •Функции autolisp
- •Арифметические функции
- •Логические функции
- •Функции вычислений
- •Функции преобразования данных
- •Функции обработки строк
- •Функции обработки списков и точечных пар
- •Функции ввода данных и указания объектов
- •Функции печати, вывода сообщений и доступа к файлам
- •Функции доступа к примитивам AutoCad
- •Функции работы с памятью, приложениями и реестром Windows
- •Графические примитивы autocad в функции «command»
- •Бесконечная прямая линия
- •Многоугольник
- •Мультилиния
- •Окружность
- •Отрезок
- •Полилиния
- •Прямоугольник
- •Размеры
- •Цвет (установка текущего рабочего цвета)
- •Штриховка
- •Системные переменные autocad
- •Примеры использования элементов диалоговых окон
Функции обработки списков и точечных пар
list – создание списка из элементов.
(setq a 0.0
b 10.0
c (list a b)) ;с – список ‘(0.0 10.0), который LISP понимает как координаты двумерной точки.
append – слияние списков в один список.
(append список1 список2 …)
(setq d (append c (list 20.0))) ;продолжение примера п.1. d – список ‘(0.0 10.0 20.0).
nth – извлечение из списка элемента по порядковому номеру (нумерация элементов списка начинается с 0).
(nth номер список)
(setq e (nth 1 d)) ;e=10.0 (продолжение примера п.2)
reverse – перестановка элементов списка в обратном порядке.
(reverse список)
car – извлечение первого элемента списка или точечной пары.
(car список)
(setq e (car d)) ;e=0.0 (продолжение примера п.2)
cdr – извлечение подсписка без первого элемента.
(setq e (cdr d)) ;e=’(10.0 20.0) (продолжение примера п.2)
caar, cadr и аналогичные им
От функций car и cdr путем их повторения в разных комбинациях от двух до четырех раз образованы 28 новых функций, например:
(caar список) равносильно (car (car список))
(cadr список) равносильно (car (cdr список))
…
(caaar список) равносильно (car (car (car список)))
(caadr список) равносильно (car (car (cdr список)))
…
(cddddr список) равносильно (cdr (cdr (cdr (cdr список))))
cons – добавление к списку элемента на первую позицию или создание точечной пары.
(cons элемент список) – добавление элемента к списку.
(cons элемент1 элемент2) – создание точечной пары (элемент1 . элемент2)
vl-list*
(vl-list* 1 2) создает точечную пару (1 . 2).
(vl-list* 1 2 3 4) создает точечный список (1 2 3 . 4).
(vl-list* 1 2 3 ‘(4 5)) создает список ‘(1 2 3 4 5) (если последний элемент – список).
member – проверка принадлежности элемента списку, возвращает остаток списка или nil.
(member 3 ‘(1 2 3 4 5)) ‘(3 4 5)
(member -3 ‘(1 2 3 4 5)) nil
assoc – применяется к сложному списку (в котором элементами являются списки или точечные пары) и выбирает тот элемент, у которого первый элемент имеет заданное значение.
(assoc 8 ‘((8 . “Walls”) (6 . “DASHED”))) (8 . “Walls”)
(assoc 8 ‘((8 9 10) (11 12 13 14 15))) (8 9 10)
apply – применение функции ко всем элементам списка.
(setq a ‘(1 2 3 4 5)
p (apply ‘* a) ;p=1*2*3*4*5=120
am (apply ‘max a)) ;am=5
Функция apply удобна, когда какую-либо операцию необходимо выполнить над аргументами, количество которых заранее не известно.
mapcar – применение функции к первым элементам списков, затем – ко вторым элементам списков и т.д.
(setq a ‘(1 2 3 4 5)
b ‘(6 7 8 9 10)
p (mapcar ‘* a b) ;p=’(6 14 24 36 50)
vl-every – проверка, возвращает ли тест-функция результат T. Тест- функция применяется к первым элементам списков, затем – ко вторым элементам списков и т.д.
(vl-every ‘= ‘(15 3) ‘(15.0 3.0 9.0)) T, так проверка выполняется два раза, и 15=15.0, 3=3.0.
(vl-every ‘< ‘(4 3) ‘(15 7) ‘(15 9)) nil, так как ряд первых элементов списков 4<15<15 дает nil.
foreach – организация вычислений выражений над элементами списка.
(foreach переменная список выражение1 выражение2 …)
(setq s1 0
s2 1
a ‘(1 2 3 4 5))
(foreach p a
(setq s1 (+ s1 p)) ;s1=s1+элемент списка a
(setq s2 (* s2 p))) ;s2=s2*элемент списка a
eval – вычисление аргумента функции eval как выражения.
quote – функция, обратная по отношению к eval. Возвращает свой аргумент, не вычисляя его.
acad_strlsort – сортировка списка, элементами которого являются строки, по возрастанию.
(acad_strlsort список)
last – извлекает последний элемент списка.
(last список)
(setq e (last d)) ;e=20.0 (продолжение примера п.2)
subst – замена старых элементов списка на новые.
(subst новый старый список)
(subst 1 2 ‘(1 2 3 4 3 2 1)) ‘(2 2 3 4 3 2 2)
length – вычисление длины (количества элементов) списка.
(length список)
(length ‘(1 2 3 4 5)) 5
(length ‘((1 2 3 4 5))) 1
vl-list-length – вычисление длины (количества элементов) списка.
В отличие от функции length, аргументом функции vl-list-length может быть список, точечная пара или точечный список.
vl-member-if – проверка истинности результата применения тест-функции хотя бы к одному элементу списка. Возвращаемое значение: остаток списка, начиная с того элемента, для которого тест-функция выдала T.
(vl-member-if ‘zerop ‘(1 0 0 2 0)) ‘(0 0 2 0)
vl-member-if-not – проверка ложности результата применения тест-функции хотя бы к одному элементу списка. Возвращаемое значение: остаток списка, начиная с того элемента, для которого тест-функция выдала nil.
(vl-member-if-not ‘zerop ‘(0 0 2 0)) ‘(2 0)
vl-position – вычисление номера позиции элемента в списке. Нумерация элементов списка начинается с 0.
(vl-position элемент список)
vl-remove – удаление элемента из списка.
(vl-remove элемент список)
(vl-remove 2 ‘(1 2 12 2 1)) ‘(1 12 1)
vl-remove-if – удаление из списка всех элементов, возвращающих T при проверке тест-функцией.
(vl-remove-if ‘тест-функция список)
(vl-remove-if ‘minusp ‘(-1 2 -12 -2 1)) ‘(2 1)
vl-remove-if-not – удаление из списка всех элементов, возвращающих nil при проверке тест-функцией.
(vl-remove-if-not ‘тест-функция список)
(vl-remove-if-not ‘minusp ‘(-1 2 -12 -2 1)) ‘(-1 -12 -2)
vl-some – поочередная проверка тест-функцией элементов с одинаковым номером всех списков. Возвращает T, если тест-функция дала результат T хотя бы один раз.
(vl-some ‘тест-функция список1 список2 …)
(vl-some ‘= ‘(1 2 0) ‘(3 4 0) ‘(5 6 0)) T, так как равны третьи элементы списков.
vl-sort – сортировка элементов в списке таким образом, чтобы после сортировки тест-функция выдавала результат T. Повторяющиеся элементы могут удаляться.
(vl-sort список ‘тест-функция)
(vl-sort ‘(0 4 0 2 2 1) ‘<) ‘(0 1 2 4)
vl-sort-i – вычисление номеров элементов в списке для сортировки по правилу работы функции vl-sort.
(vl-sort-i список ‘тест-функция)
(vl-sort-i ‘(0 4 0 2 2 1) ‘<) ‘(2 0 5 4 3 1)
vl-catch-all-apply – дает возможность обработать прерывание, связанное с ошибкой.
(vl-catch-all-apply ‘* ‘(2 -8 5)) -80 (аналогично функции apply).
(vl-catch-all-apply ‘sqrt ‘(-72)) возвращает объект специального типа VL-CATCH-ALL-APPLY-ERROR, при этом не происходит аварийного завершения программы.
vl-catch-all-error-message – расшифровка сообщения об ошибке, которое закодировано в объекте типа VL-CATCH-ALL-APPLY-ERROR.
(setq a ‘(-72)
b (vl-catch-all-apply ‘sqrt a)
c (vl-catch-all-error-message b)) ;в переменной c сохраняется строка “function undefined for argument: a” (в англоязычной версии). Переменная c может быть использована для вывода сообщений и обработки возникшей ситуации.
vl-catch-all-error-p – проверка, является ли объект, возвращенный функцией vl-catch-all-apply, объектом типа VL-CATCH-ALL-APPLY-ERROR.
