 |
Сама по себе функция DEFUN возвращает только имя определяемой функции.
Hапример:
(defun add10 (x)
(+ 10 x)
) возвращает ADD10
(add10 5) возвращает 15
(add10 -7.4) возвращает 2.60000
и:
(defun dots (x y / temp)
(setq temp (strcat x "..."))
(strcat temp y)
) возвращает DOTS
(dots "a" "b") возвращает "a...b"
(dots "from" "to") возвращает "from...to"
=================================================================
- 36 -
Руководство пользователя по АВТОЛИСПу
Hикогда не используйте имена встроенных функций или символов как
, так как это сделает недоступными встроенные функции.
=================================================================
4.37.1 Библиотека символов и Автоматическая загрузка.
Определения функций могут храниться в файлах и загружаться используя
функцию LOAD в AutoLISPe, описанную ниже. Если существует файл
"acad.lsp", то AutoLISP загрузит их автоматически каждый раз когда будет
введен Чертежный редактор AutoCADa. Вы можете использовать это
обстоятельство для создания библиотеки используемых функций и быть
уверенным, что они всегда под рукой, когда понадобяться.
Любой библиотечный ".lsp" файл может содержать выражения вне функции
DEFUN. Таким образом, загружая файл, вычисляющий некоторые выражения,
включая именованные функции, Вы можете выполнять эти выражения и функции
автоматически, когда бы этот файл небыл загружен. Однако, загрузка файла
"acad.lsp" производится еще до полной инициализации Чертежного Редактора
AutoCADа, поэтому не следует испльзовать функции COMMAND в файле
"acad.lsp" (вне функции DEFUN).
4.37.2 С:ХХХ функции - Добавление Kоманд в AutoCAD.
Вы можете добавить новые команды в AutoCAD, используя функцию DEFUN
чтобы определить эти команды ка функции. Для того чтобы ими пользоваться
как командами AutoCADа, такие функции должны удовлетворять следующим
правилам:
1. Имя функции должно быть формы "С:ХХХ", где все буквы - заглавные.
Часть имени "С:" должна всегда присутствовать; часть имени "ХХХ" может
быть любым именем команды на ваш выбор, только не должныа дублировать
какую-либо команду AutoCADa, внешнюю или встроенную функцию.
2. Функция должна быть определена без аргументов - пустой список
(хотя локальные символы допускаются).
Hапример, следующая запись определяет функцию, изображающую на экране
квадрат с помощью Полилинии:
(defun C:PSQUARE (/ pt1 pt2 pt3 pt4 len)
(setq pt1 (getpoint "Lower left corner: ")) /Hижний левый угол: /
(setq len (getdist pt1 "Length of one side: ")) /Длина стороны: /
(setq pt2 (polar pt1 0.0 len))
(setq pt3 (polar pt2 (/ PI 2.0) len))
(setq pt4 (polar pt3 PI len))
(command "PLINE" pt1 pt2 pt3 pt4 "C")
)
Функции определенные таким образом могут вызываться простым вводом
"ХХХ" части имени функции, когда появилось сообщение AutoCADa "Command:".
Если "ХХХ" не является известной командой, AutoCAD пытается вызвать
функцию AutoLISPa "C:XXX" без параметров. Для приведенной выше функции
C:PSQUARE диалог будет таким:
Command: PSQUARE
Lower left corner: (ввод точки)
- 37 -
Руководство пользователя по АВТОЛИСПу
Length of one side: (ввод растояния)
После чего функция вызовет команду AutoCADа PLINE и ответит на ее запросы
для вычерчивания заданного квадрата.
Добавление команд к AutoCADу таким образом - очень мощное средство
AutoLISPa. Однажды определенная, новая команда может пользоваться всеми
возможностями AutoLISPa. Фактически использование новой команды не
требует заключать имя команды в скобки, так что команды, которыми
оперирует AutoLISP используются так же как любые другие команды AutoCADa.
4.38 (distance <точка1> <точка2>)
Эта функция возвращает расстояние между 2-х мерными точками
<точка1> <точка2>, где 2-х мерная точка - это список двух действительных
чисел. Hапример:
(distance '(1.2 2.5) '(7.7 2.5)) возвращает 6.700000
(distance '(1.0 2.0) '(3.0 4.0)) возвращает 2.828427
4.39 (eq <выражение1> <выражение2>)
Эта функция определяет идентичны ли <выражение1> и <выражение2>,
т.е. они фактически относятся к одному об'екту (например, с помощью
SETQ). EQ возвращает Т, если оба выражения идентичны, иначе nil.
Типичное применение функции - для определения являются ли два списка
фактически одним. Hапример, зададимся следующими допущениями:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
тогда:
(eq f1 f3) возвращает nil (f1 и f3 не одно и то же)
(eq f3 f2) возвращает T (f3 и f2 один и тот же
список)
Смотри так же функцию EQUAL ниже.
lsp-4-4
4.40 (equal <выражение1> <выражение2>)
Это функция определяет равны ли <выражение1> и <выражение2>, т.е.
их значение является одно и то же. Hапример, зададимся следующими
допущениями:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
тогда:
- 38 -
Руководство пользователя по АВТОЛИСПу
(equal f1 f3) возвращает T (значением f1 и f3 является одно
и то же)
(equal f3 f2) возвращает T (f3 и f2 в точности один и тот же
список)
Отметим, что в то время, как два списка EQUAL, они могут не быть EQ,
атомы, которые EQUAL всегда к тому же EQ. Добавим, что два списка,
которые EQ, всегда EQUAL.
4.41 (eval <выражение>)
Функция возвращает результат выражения <выражение>, где <выражение> -
любое выражение языка LISP. Hапример, дано:
(setq a 123)
(setq b 'a)
тогда:
(eval 4.0) возвращает 4.000000
(eval (abs -10)) возвращает 10
(eval a) возвращает 123
(eval b) возвращает 123
4.42 (exp <число>)
Эта функция вычисляет е в степени <число> (натуральный антилогарифм),
возвращает действительное число. Hапример:
(exp 1.0) возвращает 2.718282
(exp 2.2) возвращает 9.025013
(exp -0.4) возвращает 0.670320
4.43 (expt <основание> <степень>)
Эта функция возвращает <основание>, возведенное в указанную <степень>.
Если оба аргумента целые, то результат - целое число. В любом другом
случае, результат - действительное число.
Hапример:
(expt 2 4) возвращает 16
 |
|