Функции, работающие со списками и точечными парами — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Функции, работающие со списками и точечными парами

2021-06-30 38
Функции, работающие со списками и точечными парами 0.00 из 5.00 0 оценок
Заказать работу

Следующая группа функций - это функции, работающие со списками и точечными парами. Точечная пара - это двухэлементный список вида (а. b), в котором в качестве особого разделителя выступает точка (точка в такой записи отделяется пробелом как от первого, так и от второго элементов). Точечные пары используются для хранения в файлах системы AutoCAD данных о графических примитивах Первый элемент точечной пары обычно является целым числом и называется DXF -кодом, а второй - данными этого кода. Основной способ получения точечных пар - функция cons.

Есть отличия в работе некоторых функций со списками и с точечными парами.

Функция list - это основная функция, позволяющая создать список:

(list (<элемент1> [<элемент2>... [<элементN>]... ] ])

В качестве аргументов <элементы>, из которых образуется список, могут выступать любые объекты, которыми оперирует AutoLISP. Самый распространенный список - это список из двух или трех вещественных чисел, представляющий точку.

В качестве элементов списка могут выступать другие списки или точечные пары.

Примеры:

(list 12.12 0.34 5.88) - возвращает (12.12 0.34 5.88); (list 1 "ad2" (list 0 1 2)) - возвращает (1 "ad2" (0 1 2)) (третьим элементом нового списка является список из чисел 0, 1 и 2).

Следующие функции выполняют основные операции со списками:

· (append [<список1> [<список2>... [<списокN>]... ] ]) - слияние списков в один;

· (nth <номер><список>) - извлечение из списка элемента по порядковому номеру (нумерация элементов списка выполняется слева направо и начинается с нуля);

· (reverse <список>) - переворот списка;

· (car <список>) - извлечение первого элемента списка или точечной пары;

· (cdr <список>) - извлечение из списка подсписка путем удаления первого элемента, если аргумент <список> является простым списком (т. е. не точечной парой), или извлечение второго элемента, если <список> является точечной парой.

Примеры:

(append '(14 16) '(12.12 0.34 5.88)) - возвращает (14 16 12.12 0.34 5.88); (nth 0 '(12.12 0.34 5.88)) - возвращает 12.12; (reverse '(12.12 0.34 5.88)) - возвращает (5.88 0.34 12.12); (car '(12.12 0.34 5. 88)) - возвращает 12.12; (car '(62. 1)) - возвращает 62; (cdr '(12.12 0.34 5.88)) - возвращает (0.34 5.88); (cdr ' (62. 1)) - возвращает 1.

От функции car и cdr путем их повторения в разных комбинациях от двух до четырех раз в языке AutoLISP образованы следующие функции (их двадцать восемь):

· (сааr <список>) -равносильно (car (car <список>));

· (cadr <список>) -равносильно (car (cdr <список>));

· (cdar <список>) -равносильно (cdr (car <список>));

· (cddr <список>) -равносильно (cdr (cdr <список>));

· (саааr <список>) - равносильно (car (car (car <список>)))

· (caadr <список>) - равносильно (car (car (cdr <список>)))

· (cadar <список>) - равносильно (car (cdr (car <список>)))

· (caddr <список>) - равносильно (car (cdr (cdr <список>)))

· (cdaar <список>) - равносильно (cdr (car (car <список>)))

· (cdadr <список>) -равносильно (cdr (car (cdr <список>)))

· (cddar <список>) - равносильно (cdr (cdr (car <список>)))

· (cdddr <список>) -равносильно (cdr (cdr (cdr <список>)))

· (caaaar <список>) -равносильно (car (car (car (car <список>))));

· (caaadr <список>) -равносильно (car (car (car (cdr <список>)))).

Аналогичным методом раскрываются оставшиеся функции (caadar, caaddr, cadaar, cadadr, caddar, cadddr, cdaaar, cdaadr, cdadar, cdaddr, cddaar, cdddar, cddadr, cddddr).

Функция cons добавляет к списку первый элемент или создает точечную пару:

(cons <аргумент1><аргумент2>)

Если <аргумент2> является списком, то функция cons добавляет в него <аргумент1> в качестве нового первого элемента. Если <аргумент2> является атомом (т. е. не списком), то функция cons создает точечную пару типа (<аргумент1>. <аргумент2>).

Примеры:

(cons 67.4 '(10.3 12.9 -3.9)) - возвращает (67.4 10.3 12.9 -3.9); (cons "Happy" '("New" "Year")) - возвращает ("Happy" "New" "Year"); (cons 2 4) - возвращает (2. 4); (cons 8 "0") - возвращает (8. "0"); (cons 62 l) - возвращает (62. l).

Функция member проверяет принадлежность элемента списку:

(member <элемент><список>)

Если функция member обнаруживает <элемент> в аргументе <список>, то возвращает остаток списка, начиная с этого места. Если <элемент> в аргументе <список> не обнаруживается, то функция возвращает nil.

Примеры:

(member 1 '(4 50 1 2)) - возвращает (1 2); (member 4 '(4 50 1 2)) - возвращает (4 50 1 2); (member 0 '(4 50 1 2)) - возвращает nil.

Функция assoc применяется к списку, в котором элементами являются списки или точечные пары, и выбирает из этих элементов тот, у которого первый элемент имеет заданное значение:

(assoc <код><список>)

Если в аргументе <список> имеется несколько элементов, удовлетворяющих требуемому условию, то в качестве возвращаемого значения выбирается первый из них. Функция assoc - основной инструмент в операциях выборки из списка с характеристиками примитива AutoCAD того элемента, который содержит точечную пару с нужным DXF -кодом свойства (цвета, типа линии, веса и т. д.).

Примеры:

(assoc 8 '((8. "Walls") (62.4) (6. "ACAD_IS005W100"))) - возвращает (8. "walls"); (assoc 62 '((8. "Walls") (62.4) (6. "ACAD IS005W100"))) - возвращает (62. 4).

Следующие три функции (apply, mapcar, foreach) позволяют выполнять операции сразу над всеми элементами списка.

(apply '<функция><список>) - применение функции, заданной аргументом <функция> поочередно ко всем элементам списка, заданного аргументом <список>.

Примеры:

(apply '* (list 2 3 5)) - равносильно (* 2 3 5), поэтому возвращает 30; (apply 'max (list 2 3 5)) - возвращает 5.

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

(mapcar ' <функция><список1> [<список2>... [<списокN>]... ]) - применение функции, заданной аргументом <функция> сначала к первым элементам каждого из списков (<список1>,, <списокN>), затем - ко вторым элементам и т. д.; результаты объединяются в новый список, который является возвращаемым значением.

Пример:

(mapcar '* '(2 3) '(l 5)) возвращает (2 15), т. к. первый элемент результирующего списка вычисляется как (* 2 l),   а второй - как (* 3 5).

Функция foreach позволяет организовать циклическое выполнение выражений (их может быть несколько), поочередно подставляя вместо переменной цикла элементы списка:

(foreach <имя><список> [<выражение1> [<выражение2>... [ <выражениеN> ]... ] ])

Функция возвращает значение последнего вычисленного выражения. Если аргументы <выражение1>... <выражениеN> не заданы, то функция foreach возвращает nil.

Пример:

(setq s1 0 s2 l) (foreach p '(1 2 3 4 5) (setq s1 (+ s1 p)) (setq s2 (* s2 p))) - возвращает 120 (результат вычисления s2 - произведения чисел списка); кроме того, в переменной s1 сформируется сумма чисел списка.

Функция eval позволяет сформировать список и затем вычислить его (evaluate) как выражение. В таком списке на первом месте должно стоять имя функции.

Пример:

(setq mylist (list 'max 1.7 9.34 6.7)); (eval mylist) - возвращает 9.34 (вычисляется выражение (max l.7 9.34 6.7)).

Функция quote является обратной по отношению к функции eval и позволяет обрабатывать выражение как список, т. е. не вычисляя его. Сокращенным вариантом имени функции quote является одинарная кавычка.

Примеры:

(quote (6 7 8 2 1)) - возвращает (67821); '(16 23 90) - возвращает (16 23 90).

Функция acad_strlsort позволяет отсортировать по возрастанию список, элементами которого являются строки.

Пример:

(acad_strlsort '("Пн" "Вт" "Ср" "Чт" "Пт" "Сб" "Bс"))- возвращает ("Вс" "Вт" "Пн" "Пт" "Сб" "Ср" "Чт").

Поделиться с друзьями:

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.