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

Функции вычислений

К основным вычислительным функциям относятся следующие функции:

- (fix <число>) - усечение числа до целого (отбрасывается дробная часть);

- (rem [<число1> [<число2> ... [<числоN>] ... ]]) - получение остатка от деления аргументов <число1> на <число2>, затем остатка от деления результата на аргумент <число3> и т. д.;

- (mах [<число1> [<число2> ... [<числоN>] ... ]]) - определение максимального из чисел;

- (min [<число1> [<число2> ... [<число1N>] ... ]]) - определение минимального из чисел;

- (gcd <число1> <число2>) - вычисление наибольшего общего делителя для двух положительных целых чисел;

- (angle <точка1> <точка2>) - вычисление угла, в радианах, между осью Х текущей системы координат и вектором, идущим из точки заданной аргументом <точка1> в точку заданную аргументом <точка2>;

- (distance <точка1> <точка2>) - вычисление расстояния между двумя точками, заданными аргументами <точка1> и <точка2>;

- (sqrt <число>) - вычисление квадратного корня;

- (sin <число>) - вычисление синуса угла;

- (cos <число>) - вычисление косинуса угла;

- (atan <число1> [<число2>]) - вычисление арктангенса; если второй аргумент опущен, то вычисляется арктангенс от первого аргумента <число1>; если заданы оба аргумента, то вычисляется арктангенс частного от деления первого аргумента на второй <число1>/<число2>; если аргумент <число2> равен нулю, то возвращается угол +pi/2 или -pi/2 (знак выбирается по знаку аргумента <число1>);

- (ехр <число>) - вычисление натурального антилогарифма- результата возведения в степень постоянной е (2.71828);

- (expt <основание> <степень>) - возведение числа в степень;

- (log <число>) - вычисление натурального логарифма.

Примеры:

(fix -10.083) - возвращает -10;

(fix 40.45) - возвращает 40;

(rem 14 2) - возвращает о (результат целый, т. к. оба аргумента целые);

(rem 12.9 3.5) - возвращает 2.4;

(max 7 3.4 2.0092) - возвращает 7.о (результат вещественный, поскольку есть вещественные аргументы);

(min 7 3.4 2.0092) - возвращает 2.0092;

(gcd 42 12) - возвращает б;

(angle ' (0 0) ' (50.0 50.0)) - возвращает 0.785398;

(distance ' (0 0) ' (250.0 0.0)) - возвращает 250.0;

(sqrt 25) - возвращает 5.0;

(sin 0.0) - возвращает 0.0;

(cos 0.0) - возвращает 1.0;

(atan 1) - возвращает 0. 785398;

(atan -1 0) - возвращает -1.5708;

(ехр 1) - возвращает 2.71828;

(expt 2 2) - возвращает 4 (оба аргумента целые);

(expt -2 2.0) - возвращает 4.0;

(log 1) - возвращает 0.0.

 

 

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

- (nth <номер> <список>) - извлечение из списка элемента по порядковому номеру (нумерация элементов списка выполняется слева направо и начинается с нуля);

- (reverse <список>) - переворот списка;

- (car <список>) - извлечение первого элемента списка или точечной пары;

- (cdr <список>) - извлечение из списка подсписка путем удаления первого элемента, если аргумент <список> является простым списком (т. е. не точечной парой), или извлечение второго элемента, если <список> является точечной парой.

Примеры:

(append '(14 16) '(12.12 0.34 5.88)) - возвращает (14 16 12.12 0.34 5.88);

(nth о '(12.12 0.34 5.88)) - возвращает 12.12;

(reverse '(12.12 0.34 5.88)) - возвращает (5.88 0.34 12.12);

(car '(12.12 0.34 5. 88)) - возвращает 12.12;

(car '(62 . 1)) - возвращает 62;

(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 <список>));

- (саааr <список>) - равносильно (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.