Введение в Автолисп | страница 21
Есть еще одно замечание по поводу программы. В ней создано шесть наборов, каждый из которых содержит один примитив, а именно - последний, созданный в чертеже. Конечно, это не лучшее решение. В практике обычно используется другой принцип, позволяющий отобрать нужные примитивы с помощью фильтров и описанный ниже (см. разд. 6.4).
5. РАБОТА СО СПИСКАМИ
Все обрабатываемые данные Автолисп делит на две большие группы: атомы и списки. Под атомом понимается некоторая программная единица, рассматриваемая Автолиспом как единое целое. Список, по определению разработчиков [5], представляет собой группу связанных элементов, разделенных пробелами и заключенных в скобки. Он служит эффективным средством хранения связанных величин и может содержать данные любого типа. При необходимости идентификации элемента с атомом или списком можно воспользоваться одной из двух функций:
(atom элемент) возвращает nil, если элемент является списком, и T - в противном случае,
(listp элемент) возвращает Т., если элемент является списком, и nil - в противном случае. Примеры:
(setq а ‘(х у z))
(atom ‘а) возвращает T,
(atom а) возвращает nil,
(atom ‘(a b c)) возвращает nil,
(listp '(abc)) возвращает T,
(listp ‘а) возвращает nil,
(listp 4.38) возвращает Т.
5.1. Формирование списков
Основной функцией формирования списков является list. Эта функция принимает любое количество выражений и собирает их в один список. Очень часто она используется для указания координат точки в двух- или трехмерном пространстве. В общем случае формат функции выглядит следующим образом:
(list выражение ...).
Примеры списков:
(list a b с) возвращает (А В С),
(list a (b с) d) возвращает (А (В С) D),
(list 2.1 4.8) возвращает (2.1 4.8).
Если ни одно из выражений не содержит переменных или неопределенных элементов, функция list может быть заменена функцией quote. Для Автолиспа эквивалентны выражения
(list 2.1 4.8) и ‘(2.1 4.8).
(append список ...). Функция принимает любое количество списков и объединяет их в один.
(append ‘(a b) ‘(с d)) возвращает (А В С D),
(append ‘((a) (b)) ‘((с) (d))) возвращает ((A) (B) (C) (D)).
(cons новый_элемент список). Функция принимает новый элемент в качестве первого, добавляя его к уже существующему списку, и возвращает новый список.
(cons ‘a ‘(b с d)) возвращает (А В С D),
(cons ‘(a) ‘(b с d)) возвращает ((A) В С D).
Если место аргумента список занимает атом, функция формирует уже упоминавшуюся ранее точечную пару.
(cons ‘а 2) возвращает