Функции, работающие со списками и точечными парами
Описание функций, работающих со списками и точечными парами. Точечная пара — двухэлементный список вида (а . b), в котором разделителем выступает точка. Использование точечных пар для хранения в файлах системы AutoCAD данных о графических примитивах.
| Рубрика | Программирование, компьютеры и кибернетика | 
| Вид | контрольная работа | 
| Язык | русский | 
| Дата добавления | 12.10.2010 | 
| Размер файла | 11,1 K | 
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Функции, работающие со списками и точечными парами
Точечная пара - это двухэлементный список вида (а. 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>]... ] ] ) - слияние списков в один:
(append '(14 16) '(12.12 0.34 5.88)) - возвращает (14 16 12.12 0.34 5.88);
(nth <номер> <список>) - извлечение из списка элемента по порядковому номеру (нумерация элементов списка выполняется слева направо и начинается с нуля):
(nth 0 '(12.12 0.34 5.88)) - возвращает 12.12;
(reverse <список>) - переворот списка:
(reverse '(12.12 0.34 5.88)) - возвращает (5.88 0.34 12.12);
(car <список>) - извлечение первого элемента списка или точечной пары:
(car '(12.12 0.34 5. 88)) - возвращает 12.12;
(car '(62. 1)) - возвращает 62;
(cdr <список>) - извлечение из списка подсписка путем удаления первого элемента, если аргумент <список> является простым списком (т. е. не точечной парой), или извлечение второго элемента, если <список> является точечной парой.
(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 <список>));
(сааar <список>) - равносильно (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 является обратной по отношению к функции quote. Она позволяет сформировать список и затем вычислить его (evaluate) как выражение. В таком списке на первом месте должно стоять имя функции.
Пример:
(setq mylist (list 'max 1.7 9.34 6.7));
(eval mylist) - возвращает 9.34 (вычисляется выражение (max l.7 9.34 6.7)).
Функция acad_strlsort позволяет отсортировать по возрастанию список, элементам которого являются строки.
Пример:
(acad_strlsort '("Пн" "Вт" "Ср" "Чт" "Пт" "Сб" "Bс"))- возвращает ("Вс" "Вт" "Пн" "Пт" "Сб" "Ср" "Чт").
Функция (length <список>) возвращает целое число, равное числу элементов в <списке>.
Функция (last <список>) возвращает последний элемент <списка>. Список не должен быть равен nil.
Пример:
(last (1 2 3 4 5)) возвращает 5.
Функция (subst <новый элемент> <старый элемент> <список>).
осуществляет поиск в списке <старых элементов> и возвращает копию <списка> с заменой каждого встреченного <старого элемента> на <новый элемент>. Если в <списке> не найден <старый элемент>, функция возвращает <список> неизменным.
Пример:
Пусть (setq sample (a b (c d) b))
тогда (subst c b sample)
возвратит (a c (c d) c)
Функции ввода данных и указания объектов
К основным функциям ввода данных и указания объектов относятся следующие:
(getkword [запрос]) - ввод ключевого слова;
(getint [запрос]) - ввод целого числа в диапазоне от -32768 до +32767;
(getreal [запрос]) - ввод вещественного числа;
(getdist [<точка1>] [запрос]) - получение расстояния (как вещественного числа) с помощью ввода числа (на клавиатуре в текущей форме линейных единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задана точка с помощью аргумента <точка1>, то расстояние можно получить с помощью ввода числа (на клавиатуре) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>;
(getangle [<точка1>] [запрос]) - получение угла (как вещественного числа в радианах) с помощью ввода числа (на клавиатуре в текущей форме угловых единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задан аргумент <точка1>, то угол можно получить с помощью ввода числа (на клавиатуре в радианах) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>; при вводе угла с помощью числа он принимается с учетом значения системных переменных ANGBASE и ANGDIR; возвращаемое значение учитывает значение ANGBASE и игнорирует значение ANGDIR;
(getpoint [<точка1>] [запрос]) - ввод точки с помощью клавиатуры или мыши; если задан аргумент <точка1>, то при вводе точки с помощью мыши рисуется резиновая нить, начинающаяся в точке, заданной аргументом <точка1>;
(getcorner <точка1> [запрос]) - ввод точки с помощью клавиатуры или мыши; при вводе точки с помощью мыши рисуется резиновая рамка, начинающаяся в точке, заданной аргументом <точка1>;
(getstring [<флаг>] [<запрос>]) - ввод строки; если задан аргумент <флаг> и он отличен от nil, то в строке, вводимой пользователем, допускаются пробелы (признаком конца является <Enter>); если аргумент <флаг> отсутствует или задан равным nil, то признаком конца строки является пробел или <Enter>;
(setq s (getstring T "Введите строку:"))
(getvar <имя>) - чтение текущего значения системной переменной с наименованием, заданным аргументом <имя>;
(setvar <имя> <значение>) - установка значения системной переменной с наименованием, заданным аргументом <имя>;
Аргументы <имя> и <значение> должны быть текстовыми строками.
Функции вывода
(princ [<аргумент>]) - <аргумент> выводится на экран; если <аргумент> - строка, то при записи она выводится без ограничивающих ее двойных кавычек; если опущен аргумент, то функция осуществляет так называемый тихий выход, т. е. не возвращает никакого значения, в том числе nil;
(prinl [<аргумент>]) - функция аналогична princ, но если <аргумент> - строка, то при записи она выводится с ограничивающими двойными кавычками; специальные символы (обратная косая черта, кавычки, конец строки и т. п.) предваряются обратной косой чертой; если аргумент опущен, то функция prinl тоже осуществляет тихий выход;
(print [<аргумент>]) - функция аналогична prin1, но при выводе добавляет перед аргументом символ конца строки предыдущей записи, а после аргумента - пробел; тоже может осуществлять тихий выход.
Подобные документы
- Создание классов, реализующих работу со списками и применение их к задаче построения графических моделей. Использование языка С++ для реализации списковой структуры. Назначение и условия применения программы. Руководство для программиста и оператора. 
 курсовая работа [131,1 K], добавлен 19.03.2010
- Правила задавания адреса при создании гиперссылок, применение атрибутов и тэгов. Способы создания якоря (метки). Использование рисунков в качестве гиперссылки. Работа с упорядоченными, неупорядоченными и вложенными списками, списками определений. 
 презентация [347,9 K], добавлен 19.08.2013
- Операции, осуществляемые с однонаправленными списками. Порядок создания однонаправленного списка, вставка и удаление элементов. Алгоритмы основных операций с двунаправленными списками. Примеры реализации однонаправленных и двунаправленных списков. 
 курсовая работа [172,7 K], добавлен 20.01.2016
- Приобретение навыков работы со списками в программах на Visual Prolog. Изображение списка в виде головы и хвоста. Удаление всех вхождений элемента в списке. Обозначение пустого списка. Вычисление суммы элементов, стоящих в списке на нечетных местах. 
 лабораторная работа [94,9 K], добавлен 27.11.2014
- Пристрої базової конфігурації персонального комп’ютера. Порядок роботи зі списками даних в текстовому редакторі: створення нумерованого або маркірованого списку, використання багаторівневих списків, перетворення їх в звичайний текст, додавання позицій. 
 реферат [1,0 M], добавлен 27.09.2011
- Понятие и обработка списков. Имя домена списка. Примеры записи списков. Основные принципы работы со списками. Рекурсивная программа обработки списка. Определение номера элемента или элемента по номеру. Решение задач, использующих структуру графа. 
 презентация [65,0 K], добавлен 29.07.2012
- Створення програми для роботи зі зв'язаними списками засобами Delphi. Причини використання динамічної пам'яті комп’ютера. Розробка технічного завдання. Аналіз вимог та визначення специфікації. Етап реалізації та розробка документації користувача. 
 курсовая работа [487,5 K], добавлен 08.08.2011
- Приложения, позволяющие работать со списками и базами данных. MS Access - классическая система управления базами данных. Понятие списков и данных, особенности их создания в среде MS Office. Расчёт исходящих остатков данных в табличном процессоре MS Excel. 
 курсовая работа [1,2 M], добавлен 25.04.2013
- Выполнение заданий на вычисление функции на указанном диапазоне и построение графика функции. Нахождение суммы числового ряда. Нахождение корней уравнения командой "Подбор параметра". Описание технологии работы со списками в электронной таблице Excel. 
 контрольная работа [35,3 K], добавлен 15.11.2010
- История распространения системы AutoCAD. Требования к компьютеру, на котором планируется установить современную программу. Возможности системы, черчение и моделирование, создание произвольных форм, 3D моделей тел и поверхностей, рабочей документации. 
 статья [157,1 K], добавлен 01.05.2010
