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

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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.