Функции обработки списков и точечных пар
1. list – создание списка из элементов. (setq a 0.0 b 10.0 c (list a b));с – список ‘(0.0 10.0), который LISP понимает как координаты двумерной точки.
2. append – слияние списков в один список. (append список1 список2 …) (setq d (append c (list 20.0)));продолжение примера п.1. d – список ‘(0.0 10.0 20.0).
3. nth – извлечение из списка элемента по порядковому номеру (нумерация элементов списка начинается с 0). (nth номер список) (setq e (nth 1 d));e=10.0 (продолжение примера п.2)
4. reverse – перестановка элементов списка в обратном порядке. (reverse список)
5. car – извлечение первого элемента списка или точечной пары. (car список) (setq e (car d));e=0.0 (продолжение примера п.2)
6. cdr – извлечение подсписка без первого элемента. (setq e (cdr d));e=’(10.0 20.0) (продолжение примера п.2)
7. caar, cadr и аналогичные им От функций car и cdr путем их повторения в разных комбинациях от двух до четырех раз образованы 28 новых функций, например: (caar список) равносильно (car (car список)) (cadr список) равносильно (car (cdr список)) … (caaar список) равносильно (car (car (car список))) (caadr список) равносильно (car (car (cdr список))) … (cddddr список) равносильно (cdr (cdr (cdr (cdr список))))
8. cons – добавление к списку элемента на первую позицию или создание точечной пары. (cons элемент список) – добавление элемента к списку. (cons элемент1 элемент2) – создание точечной пары (элемент1. элемент2)
9. 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) (если последний элемент – список).
10. member – проверка принадлежности элемента списку, возвращает остаток списка или nil. (member 3 ‘(1 2 3 4 5)) ® ‘(3 4 5) (member -3 ‘(1 2 3 4 5)) ® nil
11. assoc – применяется к сложному списку (в котором элементами являются списки или точечные пары) и выбирает тот элемент, у которого первый элемент имеет заданное значение. (assoc 8 ‘((8. “Walls”) (6. “DASHED”))) ® (8. “Walls”) (assoc 8 ‘((8 9 10) (11 12 13 14 15))) ® (8 9 10)
12. 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 удобна, когда какую-либо операцию необходимо выполнить над аргументами, количество которых заранее не известно.
13. mapcar – применение функции к первым элементам списков, затем – ко вторым элементам списков и т.д. (setq a ‘(1 2 3 4 5) b ‘(6 7 8 9 10) p (mapcar ‘* a b);p=’(6 14 24 36 50)
14. 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.
15. 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
16. eval – вычисление аргумента функции eval как выражения.
17. quote – функция, обратная по отношению к eval. Возвращает свой аргумент, не вычисляя его.
18. acad_strlsort – сортировка списка, элементами которого являются строки, по возрастанию. (acad_strlsort список)
19. last – извлекает последний элемент списка. (last список) (setq e (last d));e=20.0 (продолжение примера п.2)
20. subst – замена старых элементов списка на новые. (subst новый старый список) (subst 1 2 ‘(1 2 3 4 3 2 1)) ® ‘(2 2 3 4 3 2 2)
21. length – вычисление длины (количества элементов) списка. (length список) (length ‘(1 2 3 4 5)) ® 5 (length ‘((1 2 3 4 5))) ® 1
22. vl-list-length – вычисление длины (количества элементов) списка. В отличие от функции length, аргументом функции vl-list-length может быть список, точечная пара или точечный список.
23. vl-member-if – проверка истинности результата применения тест-функции хотя бы к одному элементу списка. Возвращаемое значение: остаток списка, начиная с того элемента, для которого тест-функция выдала T. (vl-member-if ‘zerop ‘(1 0 0 2 0)) ® ‘(0 0 2 0)
24. vl-member-if-not – проверка ложности результата применения тест-функции хотя бы к одному элементу списка. Возвращаемое значение: остаток списка, начиная с того элемента, для которого тест-функция выдала nil. (vl-member-if-not ‘zerop ‘(0 0 2 0)) ® ‘(2 0)
25. vl-position – вычисление номера позиции элемента в списке. Нумерация элементов списка начинается с 0. (vl-position элемент список)
26. vl-remove – удаление элемента из списка. (vl-remove элемент список) (vl-remove 2 ‘(1 2 12 2 1)) ® ‘(1 12 1)
27. vl-remove-if – удаление из списка всех элементов, возвращающих T при проверке тест-функцией. (vl-remove-if ‘тест-функция список) (vl-remove-if ‘minusp ‘(-1 2 -12 -2 1)) ® ‘(2 1)
28. vl-remove-if-not – удаление из списка всех элементов, возвращающих nil при проверке тест-функцией. (vl-remove-if-not ‘тест-функция список) (vl-remove-if-not ‘minusp ‘(-1 2 -12 -2 1)) ® ‘(-1 -12 -2)
29. vl-some – поочередная проверка тест-функцией элементов с одинаковым номером всех списков. Возвращает T, если тест-функция дала результат T хотя бы один раз. (vl-some ‘тест-функция список1 список2 …) (vl-some ‘= ‘(1 2 0) ‘(3 4 0) ‘(5 6 0)) ® T, так как равны третьи элементы списков.
30. vl-sort – сортировка элементов в списке таким образом, чтобы после сортировки тест-функция выдавала результат T. Повторяющиеся элементы могут удаляться. (vl-sort список ‘тест-функция) (vl-sort ‘(0 4 0 2 2 1) ‘<) ® ‘(0 1 2 4)
31. vl-sort-i – вычисление номеров элементов в списке для сортировки по правилу работы функции vl-sort. (vl-sort-i список ‘тест-функция) (vl-sort-i ‘(0 4 0 2 2 1) ‘<) ® ‘(2 0 5 4 3 1)
32. vl-catch-all-apply – дает возможность обработать прерывание, связанное с ошибкой. (vl-catch-all-apply ‘* ‘(2 -8 5)) ® -80 (аналогично функции apply). (vl-catch-all-apply ‘sqrt ‘(-72)) возвращает объект специального типа VL-CATCH-ALL-APPLY-ERROR, при этом не происходит аварийного завершения программы.
33. 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 может быть использована для вывода сообщений и обработки возникшей ситуации.
34. vl-catch-all-error-p – проверка, является ли объект, возвращенный функцией vl-catch-all-apply, объектом типа VL-CATCH-ALL-APPLY-ERROR.
|