第三章AutoLISP的基本函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


例:看两个例子的区别
_$ (setq add +) #<SUBR @0841c5a8 +> _$ (add 1 2) 3 • 3.2数值函数 • 包含基本算术函数、三角函数以及位操作布尔函数。大部分函数返回值是整 数还是实数遵循下列规则。 1. 若参数表中的所有参数都为整型,则AutoLISP求值器对表作整数运算,返回 整数值。 2. 若参数表中有一个参数为实型,则AutoLISP求值器对表作浮点运算,返回实 型值。 3. 若参数多于两个,从左到右计算。 _$ (setq add '+) + _$ ((eval add) 1 2) 3
பைடு நூலகம் •
• • • • • • • • • • • • • • • • • • •
数学函数
函数 说明 (+ [number number] ...) 返回所有数值的总和 (- [number number] ...) 从第一个数值中减去第二个和后面的数值,返回差值 (* [number number] ...) 返回所有数值的乘积 (/ [number number] ...) 用第一个数值除以后面其他数值的乘积,返回商值 (~ int) 返回参数的按位非(即 1 的补码为0) (1+ number) 返回参数加 1 后的结果 (1- number) 返回参数减 1 后的结果 (abs number) 返回参数的绝对值 (atan num1 [num2]) 返回一个数的反正切值(以弧度为单位) (cos ang) 返回一个以弧度表示角度的余弦值 (exp number) 返回常数 e(实数 2.718282...)的指定次幂的值 (expt base power) 返回一个数的指定次幂的值 (fix number) 截去实数的小数部分,将它转换成整数后返回该整数 (float number) 将一个数转换成实数后返回该实数 (gcd int1 int2) 返回两个整数的最大公约数 (log number) 以实数形式返回一个数的自然对数 (logand [int int ...]) 返回一组整数逻辑按位与 (AND) 的结果 (logior [int int ...]) 返回一组整数逻辑按位或 (OR) 的结果
素后剩下元素组成的表 一般性表 返回去掉顶层第一个元 lst为 点对 返回点对右元素 nil(空表) 返回nil
_$ (cdr '(x y z)) (Y Z) _$ (cdr '(0 . "LINE")) "LINE" _$ (cdr '(0 "LINE")) ("LINE")
3.
• (setq pt '(1.0 1.0 1.0)) • (setq pt (1.0,1.0,1.0))
;正确 ;错误
• • • • • • • • • • • • • • • • • • • • •
3.1.4再求值函数eval 求表达式值的值,也就是说求两次值。 (eval epxr) 例如 _$ (setq a '(* 5 6)) (* 5 6) _$ (eval a) 30 _$ (setq a 'b) B _$ (setq b 'c) C _$ (eval a) C _$ (eval ‘a) ;quote只能阻止一次求值 B _$ (eval 5) ;对数求值结果为其自身 5 _$ (eval “(+ 3 4)”) ;对字符串求值结果为其自身 "(+ 3 4)" _$
• •
• • •
(max [number number ...]) 返回给定的数中的最大值 (min [number number ...]) 返回给定的数中的最小值
_$ (max 1.0 2) 2.0 最大值是2,但函数返回实数2.0
5. 6. 7. 8. 9. 10. • • • •
• •
(gcd int1 int2) 返回两个整数的最大公约数 (exp number) 返回常数 e(实数 2.718282...)的指定次幂的值 (expt base power) 返回一个数的指定次幂的值 (log number) 以实数形式返回一个数的自然对数 (sqrt number) 以实数形式返回一个数的平方根 (abs number) 返回参数的绝对值 3.2.2三角函数 参数可以是实型或整型,但返回值总为实型,角度以弧度表示。 (cos ang) 返回一个以弧度表示的角度的余弦值 (sin ang) 以实数形式返回一个以弧度表示的角度的正弦值
• • • • • 4.
CAR和CDR的组合函数 CAR和CDR可任意组合,深度最多为四级。组合形式为CXR、CXXR、 CXXXR、CXXXXR,其中X为A或D,A表示CAR,D表示CDR。例如 CAAR 、CADR、 CADADR。注意:作用顺序为从右到左。 _$ (cadr ‘(x y z)) ;等同(car (cdr '(x y z))) Y _$ (caddr '(x y z)) Z _$ (last lst) 返回表的最后一个元素;若LST为nil,返回nil
(atan num1 [num2]) 返回一个数的反正切值(以弧度为单位) 如果仅提供一个参数 num1,本函数返回数 num1 的以弧度为单位的反正 切值。如果提供了两个参数 num1 和 num2,本函数返回 num1/num2 的 以弧度为单位的反正切值。如果 num2 为 0,该函数返回正的或负的 1.570796 弧度(+90 度或 -90 度),其正负取决于 num1 的正负。该函数 返回的角度的范围是 -pi/2 至 +pi/2(弧度)。 _$ (atan 1) 0.785398 _$ (atan 2 3.0) 0.588003
• • • • • • • •
_$ (setq d 'c) C _$ (set d 2) 2 _$ c 2 _$ 注意:使用set函数时,符号的值不为符号出错。
• • • • • • • • • • • • • • •
_$ (setq d nil) nil _$ (set d 2) ; 错误: 参数类型错误: symbolp nil _$ 3.1.3禁止求值函数quote 等同于单引号(‘),调用格式为(quote expr),例如 (quote (+ 6 5))等同 ‘(+ 6 5) 注意求值与不求值的区别 例如 $ (setq a '(+ 6 5)) (+ 6 5) _$ (setq a (+ 6 5)) 11 _$ 该函数在引用表中经常用到,例如
• • • • • • • •
Setq函数从左到右给变量赋值 例如:_$ (setq x 2.0 y 4.0 pt (list x y)) _$ (2.0000 4.0000) _$ 3.1.2赋值函数set 将符号名的值设置成一个表达式的值 (set sym expr) set 函数与 setq 类似,但 set 计算两个参数的值,而 setq 只计算第二个参数 的值。
• • • • • •
_$ (last '(a b c)) C _$ (last '(2)) ;只有一个元素 2 _$ (last nil) nil
(nth n lst) 返回表的第 n 个元素,从零排序,其中n>=0,若n大于表的最大元 素号,返回nil。 • _$ (nth 2 '(a (a b) (c d) e)) • (C D) • _$ (nth 5 '(x y)) • nil 3.3.2表的构造与修改函数 5.
返回顶层第一个元素 一般性表 lst为 点对 返回点对左元素 n il(空表) 返回n il
• • • • • • • • 2.
_$ (car '(x y z)) X _$ (car ‘((a b (c)) d 5)) (A B (C)) _$ (car '(0 . "LINE")) 0 _$ (car '()) nil (cdr lst)
• • • •
• • • • • • • • • •
3.2.3数的类型转换函数 (fix number) 截去实数的小数部分,取整 (参数整实皆可) (float number) 将一个数转换成实数(参数整实皆可) _$ (float 1) 1.0 _$ (float 1.0) 1.0 _$ (fix 1.6) ;注意不是四舍五入 1 3.2.4整数操作布尔函数 布尔运算 与 (logand [int int ...]) 或 (logior [int int ...]) 结果为1的条件 位都为1 至少有一个位为1
1.
(cons new-first-element lst)
new - first - element 为第一个元素 表 返回一个新表, lst为原子 返回一个点对 nil 返回一个表,只含 new - first - element 一个元素 _$ (cons 'x '(a b c)) (X A B C) _$ (cons 'x 'a) (X . A) _$ (cons 'a nil) (A) _$ (setq x 1 y 2) 2 _$ (cons x y) (1 . 2)
3.
• • • • • • • • • • • 4.
求余数(rem [num1 num2 ...]) 若参数多于两个时,前面两个数相除取余数在与后面的数相除取余数。 _$ (rem) ;注意:无参数 0 _$ (rem 41 5 -4) ;等同(rem (rem 41 5) -4) 1 _$ (rem (rem 41 5) -4) 1 若余数非零,则符号与数num1的符号相同。 _$ (rem -6 4) -2 _$ (rem 6 -4) 2 最大值和最小值
• • • • • • • •
(lsh [int numbits]) 返回一个整数进行指定位逻辑移位后的结果 (max [number number ...]) 返回给定的数中的最大值 (min [number number ...]) 返回给定的数中的最小值 (minusp number) 检查一个数是否是负数 (rem [num1 num2 ...]) 用第一个数除以第二个数,返回余数 (sin ang) 以实数形式返回一个以弧度表示的角度的正弦值 (sqrt number) 以实数形式返回一个数的平方根 (zerop number) 检查一个数的值是否为 0
非 (~ int)
异或 (VLISP无异或函数)
位为0
只有其中一个位为1
• • • • • • • • • •
位操作在CAD中经常用到。例如系统变量OSMODE存储目标捕捉模式 1:终点;2:中点,4:圆心,8:节点 ;测试节点捕捉模式是否被设置 (setq a (getvar "OSMODE")) (IF(= (LOGAND A 8) 8) (PRINC "\n节点捕捉模式被设置") (PRINC "\n节点捕捉模式未被设置") ) 3.3表处理函数 表处理函数是其它语言中名有的,其中有些函数可以处理点对,但大部分函 数只能处理一般的表。 1. (car lst) 返回表的第一个元素
2. • • • • • • • 3. • • • • • • •
(list [expr ...]) 将任意数目的表达式合成一个表 _$ (list (+ 5 6) 'c 'd) (11 C D) _$ (list 'a '(b c) 'd) (A (B C) D) _$ (list) nil _$ (append lst ...) 将任意数目的表合成一个表 _$ (append '(a b) '(c d)) (A B C D) _$ (setq x '(a b c) y '(d e f)) (D E F) _$ (append x y) (A B C D E F) _$
• 1. • • • • • • • • • • • 2.
3.2.1算术运算函数 函数 + — * / _$ (+ 1 2 3) ;含义 1+2+3 6 _$ (- 5 1 2) ;含义 5-1-2 2 _$ (- 5) ;注意:当减法函数只有一个参数时,给数取相反数 -5 _$ (* 2 3 4.0) ;含义 2*3*4.0 24.0 _$ (/ 2 3 2.0) ;含义 2/3/2.0 0.333333 ;注意其它高级语言的0.0 _$ 加1减1函数 1+ 1- 常用在循环中,注意:加减号与1之间无空格 (1+ n) 等同 (+ 1 n) (1- n) 等同 (- n 1)
相关文档
最新文档