Функции, работающие со списками и точечными парами
Описание функций, работающих со списками и точечными парами. Точечная пара — двухэлементный список вида (а . 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