Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

(reverse ‘((a) b c))  возвращает  (С  B (A)).

(subst новый_элемент старый_элемент список). Функция отыскивает в списке старый_элемент  и возвращает копию списка, в которой старый_элемент заменен новым. Если  старый_элемент в списке отсутствует, список возвращается без изменений.

(setq sample ‘(a b (c d) b))

(subst ‘qq ‘b sample)  возвращает  (A  QQ  (C  D)  QQ),

(subst ‘qq ‘(c d) sample)        возвращает  (A  B  QQ  B),

  (subst ‘qq ‘x sample)  возвращает  (A  B  (C  D)  B).

(length список)  возвращает число элементов в списке.

(length ‘(a b c d))         возвращает 4,

(length ‘(a b (c d)))         возвращает 3,

(length ‘())                         возвращает 0.

(mapcar функция список1 ... списокN). Функция mapcar просматривает  списки, совершает над ними операции, предписанные  функцией и возвращает результат.

(setq a 10 b 20 c 30)

(mapcar ‘1+ (list a b c))         возвращает  (11  21  31),

т. е., использование функции  mapcar эквивалентно использованию последовательно трех выражений:

(1+ a),

(1+ b),

(1+ c).


Извлечение  данных  из  списка

Двумя основными функциями, позволяющими извлечь из списка хранящиеся в нем данные, являются  car и  cdr.

НЕ нашли? Не то? Что вы ищете?

(car список). Функция возвращает первый элемент списка. Если список пуст, возвращается  nil.

(car ‘(a b c))         возвращает  А,

(car ‘((a b) c))         возвращает  (A  B),

(car ‘())                        возвращает  nil.

(cdr список). Функция возвращает список, за исключением первого элемента. Если список пуст, возвращается  nil.

(cdr ‘(a b c))         возвращает  (B  C),

(cdr ‘((a b) c))                возвращает  (С),

(cdr ‘())                        возвращает  nil.

Следует иметь в виду, что функция  cdr возвращает список, поэтому при попытке извлечь с ее помощью координату  “y” двумерной точки может возникнуть конфликтная ситуация. Действительно,

(cdr ‘(x y))         возвращает  (Y),

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

                (car ‘(y)).

Таким образом, извлечение координаты “y” должно быть осуществлено следующей операцией:

               (car (cdr ‘(x y))).

Для вкладываемых друг в друга функций  car и  cdr используется сокращенная запись:

(cadr список)        эквивалентно  (car (cdr список)),

(caar список)        эквивалентно  (car (car список)),

(cadar список)        эквивалентно  (car (cdr (car список)))

и так далее. Полная глубина проникновения сцепленных функций  car – cdr в обрабатываемый список достигает четырех уровней. Охватывающие крайние возможности метода функции выглядят как  (caaaar) и  (cddddr).  Полный перечень функций можно найти в соответствующей литературе [5, 6].

В качестве примера приводится последовательное извлечение координат точки в трехмерном пространстве:

               (setq pt ‘(3.2  5.6  8.4))

               (car pt)                возвращает  3.0,

               (cadr pt)                возвращает  5.6,

               (caddr pt)                возвращает  8.4.

Ранее упоминалось об особом виде списка – точечной паре. Это единственный вид списка, из которого функция  cdr из­вле­кает не список, а атом. Например, из точечной пары  (62 . 2)

               

(car (62 . 2))         возвращает  62,

               (cdr (62 . 2))        возвращает  2.

(member выражение список).  Функция просматривает  список в поисках  выражения  и возвращает часть  списка, начинающуюся с  выражения.

(member ‘c ‘(a b c d e))        возвращает  (C D E),

(member ‘q ‘(a b c d e))        возвращает  nil.

(nth номер список).  Функция возвращает элемент списка с указанным порядковым номером.

(nth 2 ‘(a b c d e))                возвращает  С,

(nth 5 ‘(a b c d e))                возвращает  nil.

Следует иметь в виду, что первому элементу списка соответствует нулевой номер.

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

(setq a ‘((name box) (width 3) (size 4.7) (depth 5)))

(assoc ‘size a)                        возвращает  (SIZE 4.7),

(assoc ‘length a)                возвращает  nil.

6.  РАБОТА  С  БАЗОЙ  ДАННЫХ  ЧЕРТЕЖА

Процесс создания чертежа сводится в конечном итоге к выполнению множества отдельных операций с примитивами. Все эти операции могут осуществляться программным путем, для чего Автолисп использует ряд функций, призванных создавать графические объекты, извлекать из базы данных чертежа необходимые сведения о примитивах, комплектовать наборы объектов и готовить, таким образом, исходные данные для выполнения дальнейших действий. Часть информации хранится в базе данных чертежа в виде таблиц (имена блоков, слоев, типов линий и т. п.). Далее рассматриваются наиболее употребительные функции, способствующие обработке характеристик примитивов и содержания таблиц.

6.1.  Характеристики  примитивов

В процессе создания и обработки примитивов Автолисп оперирует их характеристиками. Количество характеристик примитива зависит от его природы и сложности. Каждая характеристика определяется присущим ей так называемым  DXF-кодом. Примерный смысл термина DXF (Drawing eXchange Format) – формат передачи графической информации. Полный список кодов можно найти, например, в [5, 6]. Некоторые часто используемые коды приведены в табл. 4.

Перечень или набор характеристик примитива представляет собой список, состоящий, в свою очередь, из подсписков, каждый из которых определяет одну из характеристик. Например, подсписок, определяющий положение начальной точки отрезка в трехмерном пространстве выглядит следующим образом:

               (10  2.2  5.0  3.1),

где  10 – код начальной точки, остальные три числа – координаты  x, y, z  точки.

Т а б л и ц а  4

Часто применяемые DXF-коды

Код  Значение

-4                Условный оператор, используемый при создании

               набора примитивов

-1                Код имени примитива

Код типа примитива

5                Код метки

Код типа линий Код текстового стиля   Код имени слоя Код начальной (базовой) точки. Для линии – это

начальная точка, для дуги или окружности –

центр, для текста – точка вставки

  11…18        Коды характеристик других точек примитива

У дуги и окружности – код радиуса, у текста – код

высоты

Код масштаба типа линий Код номера цвета

Если подсписок содержит только два элемента, он может образовывать уже упоминавшуюся ранее  точечную пару (Dotted Pair). Извлекая из чертежа характеристики отрезка прямой, мы можем получить строку, подобную следующей:

               ((-1 . <Entity name:  60000B16>)

                (0 . “LINE”)

                (6 . “CONTINUOUS”)

                (8 . “CONTUR”)

3.1  4.8) 5.6  8.7)

(62 . 2))

На основании этой характеристики можно утверждать, что извлечен отрезок сплош­ной линии красного цвета, расположенный в слое  CONTUR. Координаты начальной точки (3.1  4.8), конечной – (5.6  8.7). Пять подсписков в примере являются точечными парами.

Следует заметить, что на экран возвращаются лишь те параметры примитива, которые отличаются от параметров по умолчанию.

Среди характеристик примитива находятся две, выделяющие его из всего множества элементов чертежа как единственный и неповторимый объект. Это имя примитива и его метка (handle). И то и другое создается Автокадом и сохраняется в базе данных чертежа. Но если имя примитива может меняться от сеанса к сеансу, метка сопровождает примитив на протяжении всего его существования. Кроме того, метка может быть использована для восстановления примитива, удаленного функцией  entdel (см. ниже).

6.2.  Точечная  пара

Точечная пара представляет собой особый вид списка, состоящий всегда только из двух элементов. Этот список создается Автокадом для использования в графической базе данных. Достоинство точечной пары по сравнению с обычным списком из двух элементов заключается в том, что пара занимает меньший объем памяти, экономя, таким образом, дисковое пространство и оперативную память.  В процессе  выполнения чертежа  Автокад создает множество точечных пар, используемых для численного описания характеристик примитивов, что демонстрируется примером в предыдущем параграфе.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14