特点:方言,动态类型,函数式...
基本数据容器:表
(1.2 -3.4 0.5) ("P13" "P13M" "P13SH")
((-1 . "T-2")(0 . "P13")(1 . "GSt12")(2 . "AIR COND COMP"))
(assoc -1 above_chain) ---> ((-1 . "T-2"))
(> (- 300 (1+ a)) 60)
所有语句都用圆括号,而且圆括号中第一个元素如果是关键词,那么此圆括号
就构成了一个函数表达式。
lisp基础函数
操作用函数:(setq car cdr caaddr list append ...)
判断用函数:(null and or )
控制用函数:(if cond listp null ...)
例子:行向量运算
如何实现(7 8 9) - (4 5 6) - (1 2 3)
(defun rec_- (lst_1 lst_2 lst_3)
(if (and lst_1 lst_2 lst_3)
(cons (- (car lst_1) (car lst_2) (car lst_3))
(rec_- (cdr lst_1) (cdr lst_2) (cdr lst_3))
)
)
)
实际上autolisp有mapcar可以实现上述功能:
(mapcar '- lst_1 lst_2 lst_3)
autolisp基础函数
entsel,entmod,entmake,entget,entnext,entlast,subst,handent...
ssget,ssname,sslength,ssadd,ssdel,ssgetfirst...
strlen,substr,strcat,strcase...
distance,inters,trans,textbox,wcmatch...
grread,grdraw,command...
以2018年3月的日常改善来说明,如何使用autolisp的数据结构来实现期望的功能
一般程序框架结构,可参考PPT,AutoLisp基础讲解,再结合此案例说明
先配置系统变量,引入VLA(若需要),引入DCL,引入子函数,最后主函数过程
子函数可以不断总结归纳,减小开发时间
以SELENASBASE(select entity as base)函数为例,说明autolisp基础函数,ent类,ss类的
使用。其中:
pgfenlst:print图框(page frame entity list)
pgnenlst:print图框对应的PAGENO(page no entity lsit)
pgbplst:图框基点(page base point list)
有时间则可以讲解一下ESTI_LIN_PTS函数,功能:
判断一系列点是否在某条线段附近的某个范围之内。
linptpr:线段两个端点构成的列表
ptlist:点集
此功能涉及trans函数的活用。
可以思考一下,如何实现将多层嵌套的列表展开成一级列表,如:
((1.3 2.3 -2.1) "P13SH" ("GSt11" "AIR COND") 14.34)变成
(1.3 2.3 -2.1 "P13SH" "GSt11" "AIR COND" 14.34)
提醒:利用递归其实只要5,6行代码
下回:DCL