Базовые функции AutoLISP
ЛЕКЦИЯ №20
Функция setq — основное средство для сохранения значений, возвращаемых другими выражениями. Пример:
(setq my_d (- (+ 56.022 78.11) (+ 123.77 78.0)))
Значение выражения будет сохранено в переменной my_d.
Встроенные функции по своему назначению можно классифицировать следующим образом:
· арифметические функции;
· логические функции;
· функции вычислений;
· функции преобразований;
· функции, работающие со строками;
· функции, работающие со списками и точечными парами;
· функции ввода данных и указания объектов;
· функции доступа к файлам;
· функции доступа к примитивам;
· функции доступа к табличным данным;
· функции, работающие с расширенными данными;
· функции, использующие технологию ActiveX.
Все арифметические функции допускают работу с аргументами целого или вещественного типа. Некоторые арифметические функции допускают вызов без аргументов — в этом случае возвращается 0 (целое число).
Выполняют различные операции проверок, логические операции, организуют повторения и циклы.
|
|
Следующие функции выполняют операции сравнения:
· (= <аргумент1> [<аргумент2>... [<аргументN> ]...]) — проверка на равенство любого количества аргументов;
· (/= <аргумент1> [<аргумент2>... [<аргументN> ]...]) — проверка на неравенство любого количества аргументов;
· (< <аргумент1> [<аргумент2>... [<аргументN> ]...]) — проверка на возрастание любого количества аргументов, слева направо;
· (> <аргумент1> [<аргумент2>... [<аргументN> ]...]) —Проверка на убывание любого количества аргументов, слева направо;
· (<= <аргумент1> [<аргумент2>... [<аргументN> ]...]) — Проверка на неубывание любого количества аргументов, слева направо;
· (>= <аргумент1> [<аргумент2>... [<аргументN> ]...]) —Проверка на невозрастание любого количества аргументов, слева направо.
При сравнении строк на возрастание (убывание) используются коды буквенно-цифровых знаков строк, начиная с первого, по действующей таблице кодировки символов. Возвращается логическое значение (T или nil), nil эквивалентно значению "ложь".
Примеры:
(= -10.0 -10 -10.000) — возвращает T;
(= "STR56" "str56" "Str56") — возвращает nil;
(/= -1.0 -1) — возвращает nil;
Ø Следующие функции выполняют логические операции:
· (and [<аргумент1> [<аргумент2>... [<аргументN>]...]]) — операция логического "и" для любого количества аргументов (все, что отлично от nil, рассматривается как т);
· (or [<аргумент1> [<аргумент2>... [<аргументN>]...]]) — операция ло-гического "или" для любого количества аргументов (все, что отлично от nil, рассматривается как т);
|
|
· (not <аргумент>) — операция логического "не" (все, что отлично от nil, рассматривается как т);
· (null <аргумент>) — операция проверки на nil (все, что отлично от nil, рассматривается как т); идентична функции not.
Примеры:
(and т т nil) — возвращает nil;
(or т nil т) — возвращает T:
Условная операция типа if-then-else (если-то-иначе) осуществляется с помощью функции if:
(if <условие> <выражение1> (<выражение2>])
Типы аргументов: любые.
Примеры:
(if (> a b) 1 10) — возвращает 1, если a>b, и 10 — в других случаях;
Если функция if используется для выполнения по условию не одного выражения, а нескольких, то эти выражения следует объединить с помощью функции рrоgп (иначе будет синтаксическая ошибка, вызванная неправильным количеством аргументов при обращении к функции if):
(рrоgn <выражение1> <выражение2>... [<выражениеN>])
Функция объединяет несколько выражении в одно, когда по синтаксису языка AutoLISP может использоваться только одно (как в функции if).
Типы аргументов: любые.
Условная операция типа case с любым количеством условий осуществляется с помощью функции cond:
(cond (<условие1> [<выражение1>... ]) [ (<условие2> [<выражение2>... ])]...)
Аргументы: любое количество списков, в каждом из которых на первом месте стоит проверяемое условие, а затем следуют выражения, которые должны быть выполнены (вычислены), если это условие оказалось истинным.
Возвращаемое значение функции cond — последнее вычисленное выражение. Если вычисляемое выражение отсутствует (не задано в списке), то возвращается результат вычисления последнего аргумента <условие>. Если аргументы функции cond не заданы, то возвращается nil
Функция while позволяет организовывать операции цикла по многократно проверяемому условию:
(while <условие> <выражение1> [<выражение2>... [<выражениеN>]... ])
Типы аргументов: любые.
Возвращаемое значение функции while: значение <выражение м>, когда последнее вычисленное значение аргумента <условие> отлично от nil. При неудачном задании цикл, организуемый с помощью функции while, может оказаться бесконечным.
Пусть надо вычислить значение n! (факториал).
(setq i 1 factorial 1)
(while (< i n)
(setq i (1+ i))
(setq factorial (* factorial i))
); конец while