第二讲AutoLISP语言基础课件.ppt
《第二讲AutoLISP语言基础课件.ppt》由会员分享,可在线阅读,更多相关《第二讲AutoLISP语言基础课件.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、AutoLISPAutoLISP语言基础语言基础第第 2 2 讲讲2.1 AutoLISPAutoLISP程序语言程序语言 nLISPLISP语言:语言:(list processing language)(list processing language)是人工智能学科领域中广泛采用的一种程是人工智能学科领域中广泛采用的一种程序设计语言,是一种计算机的序设计语言,是一种计算机的表处理语言表处理语言。nAutoLISPAutoLISP语言:语言:是一种嵌入在是一种嵌入在AutoCADAutoCAD内部内部的的LISPLISP编程语言,是编程语言,是LISPLISP语言语言和和AutoCADAu
2、toCAD有有机结合的产物。机结合的产物。n本节主要介绍本节主要介绍AutoLISPAutoLISP的的数据类型数据类型、程序程序结构结构、内部函数内部函数以及以及AutoLISPAutoLISP的的编程方法编程方法。2.2 2.2 AutoLISPAutoLISP数据类型数据类型n整数整数 -2147483647-214748364721474836482147483648n实型数实型数 2.45,-0.38,-4.56E82.45,-0.38,-4.56E8n符号原子符号原子 x,y1,ax2,x,y1,ax2,abcabc,除()除().,“;5 5个字符以外的任何可打印字符。个字符以外
3、的任何可打印字符。SetqSetq是一个赋值函数,如(是一个赋值函数,如(SetqSetq X 25 X 25)查看某个符号的当前约束值(将一个值赋给符号)查看某个符号的当前约束值(将一个值赋给符号)方法:方法:Command:Command:!X X 注意:程序中定义的符号或变量名称不能与系统注意:程序中定义的符号或变量名称不能与系统定义的函数和符号名相同,否则后面的定义将取代定义的函数和符号名相同,否则后面的定义将取代已有的定义,从而引起混乱。已有的定义,从而引起混乱。2.2数据类型字符串字符串 “fxfx”“AutoCAD”“2.36”“AutoCAD”“2.36”是由双引号括起来的字符
4、序列组成的,字母的大是由双引号括起来的字符序列组成的,字母的大小写和空格字符都是有意义的。小写和空格字符都是有意义的。表表 (COS(COS phaiphai)(2 5 8)(2 5 8)AutoLISPAutoLISP中广泛使用,表提供了在一个符号中中广泛使用,表提供了在一个符号中存储大量相关数值的有效方法。存储大量相关数值的有效方法。如:(如:(setqsetq a 10 a 10)(setqsetq a(+b(d 2)a(+b(d 2)表有标准表和引用表表有标准表和引用表2 2种基本类型。标准表括号中种基本类型。标准表括号中首元素必须是合法的已存在的首元素必须是合法的已存在的AutoLI
5、SPAutoLISP的的函数;引函数;引用表是在左括号前加一撇号,如用表是在左括号前加一撇号,如 (x y)(x y),表示对表示对此表不做求值处理此表不做求值处理,而是供其它函数引用。而是供其它函数引用。2.2数据类型文件描述符文件描述符 (setq f(open “d:myfile.dat”“r”)其返回值就是其返回值就是AutoLISPAutoLISP赋予被打开文件的标识号。赋予被打开文件的标识号。实体名实体名 (setq e1(entlast)其返回值就是赋予图形实体的标识号。其返回值就是赋予图形实体的标识号。选择集选择集 (setq s1(ssget “x”(0.“circle”)其
6、返回值就是由当前图形数据库中所有圆构成的集合。其返回值就是由当前图形数据库中所有圆构成的集合。AutoLISPAutoLISP的内部变量:的内部变量:pipi3.141593.14159T T逻辑变量真逻辑变量真NILNIL逻辑变量假逻辑变量假PAUSEPAUSE函数中等待函数中等待用户输入用户输入2.2数据类型2.3 2.3 AutoLISPAutoLISP程序结构程序结构n前缀表示法前缀表示法 将运算符号放在操作数之前,如将运算符号放在操作数之前,如X=(A+B)*CX=(A+B)*C,若用若用AutoLISPAutoLISP表示则为表示则为:(setqsetq X(*(+A B)C)X(
7、*(+A B)C)n程序结构组成程序结构组成 一个完整的一个完整的AutoLISPAutoLISP程序是由一系列按顺序排程序是由一系列按顺序排列的表达式组成的列的表达式组成的,最里面的表先被求值。最里面的表先被求值。n程序注释程序注释 以一个分号以一个分号“;”开始,并在一行的末尾结束。开始,并在一行的末尾结束。2.3程序结构在程序中使用内部函数的规则:在程序中使用内部函数的规则:1 1)内部函数必须放在表中第一个元素的位)内部函数必须放在表中第一个元素的位置,且所有括号都必须左右配对;置,且所有括号都必须左右配对;2 2)函数与参数之间至少用一个空格来分开,)函数与参数之间至少用一个空格来分
8、开,多个空格和一个空格作用相同;多个空格和一个空格作用相同;3 3)一个表可分成多行书写,一行也可以书)一个表可分成多行书写,一行也可以书写多个表;写多个表;4 4)字符不分大小写,分号后的字符为注释。)字符不分大小写,分号后的字符为注释。2.3程序结构n函数的定义函数的定义:n(defundefun ()n 1n 2n n nn )n说明:说明:1).1).DefunDefun是是AutoLISPAutoLISP的一个特殊函数,由它定义的的一个特殊函数,由它定义的函数是构成程序的主体,在程序中定义的函数可以用函数是构成程序的主体,在程序中定义的函数可以用函数名来调用;函数名来调用;2.3程序
9、结构2).2).必须为符号原子,在程序调入内存产生了一个必须为符号原子,在程序调入内存产生了一个 函数定义之后,函数定义之后,将被放到原子表将被放到原子表ATOMLISTATOMLIST中。中。3).3).有如下几种格式:有如下几种格式:(/)2)()2)(/(/)2)()();即不带任何参数的空表。;即不带任何参数的空表。(注:形参在函数调用时必须用实参取代,(注:形参在函数调用时必须用实参取代,“/”/”前后须有空前后须有空格。)格。)4).4).n 是任意的表达式,是任意的表达式,它们可以是所定义函数的的调用,以形成函数的递归定义。它们可以是所定义函数的的调用,以形成函数的递归定义。这些
10、表达式是函数的定义体,它们在函数调用时将依次求这些表达式是函数的定义体,它们在函数调用时将依次求值,用于完成所需的功能。值,用于完成所需的功能。2.3程序结构AutoLISPAutoLISP程序结构实例程序结构实例:;*;*这个程序计算这个程序计算 a a 和和 b b 平方和的平方根平方和的平方根 *;*用法用法:交互输入两个实型数交互输入两个实型数 a,ba,b的值的值 *;*该程序计算并输出结果在屏幕上。该程序计算并输出结果在屏幕上。*;*(defundefun sqtabsqtab(/a b)(/a b);定义函数定义函数(setqsetq a(a(getrealgetreal“n a
11、=:”)“n a=:”);等待输入等待输入a a的值的值(setqsetq b(b(getrealgetreal“n b=:”)“n b=:”);等待输入等待输入b b的值的值(setqsetq c(c(sqrtsqrt(+(*a a)(*b b);(+(*a a)(*b b);计算平方根计算平方根(print“c=“)(print“c=“)(princprinc c)c)(princprinc));end;end2.3程序结构2.4 2.4 AutoLISPAutoLISP基本函数(六类)基本函数(六类)(一)数学运算函数(一)数学运算函数(1717种)种)+、-、*、/、1-1-、1+1+
12、、absabs、sinsin、coscos、atanatan、sqrtsqrt、minmin、maxmax、exptexpt、loglog、gcdgcd、remrem1)(+1)(+数数数数)功能功能 :求表中所有整数或实数的和。例如求表中所有整数或实数的和。例如 :Command:(+1.2 3.1 3.8)Command:(+1.2 3.1 3.8)返回:返回:8.18.12)(-2)(-数数数数)功能功能 :求表中第求表中第1 1个数减去后面所有数的差个数减去后面所有数的差 ,例如例如 :Command:(-Command:(-8.18.1 5)5)返回:返回:3.13.12.4基本函数
13、3)(*3)(*数数数数)功能功能 :求表中所有数的积求表中所有数的积 ,例如例如 :Command:(Command:(*2 2 5)5)返回:返回:1010 4)(/4)(/数数数数)功能功能 :求表中第求表中第1 1个数除以后面所有数的商。例如个数除以后面所有数的商。例如:cmnmandcmnmand:(/:(/10 10 5 5 2.0)2.0)返回值:返回值:1.01.0注意:注意:(/10 5 5)(/10 5 5)返回值:返回值:0 05)(1+5)(1+数数)功能功能 :求一个整数或实数加求一个整数或实数加 1 1 的和。例如的和。例如:Command:(1+Command:(
14、1+2.7)2.7)返回值:返回值:3.73.76)(1-6)(1-数数)功能功能:求一个整数或实数减求一个整数或实数减 1 1 的差。例如的差。例如:Command:(1-Command:(1-2.7)2.7)返回值:返回值:1.71.72.4 基本函数7)(7)(abs abs 数数)功能功能:求一个整数或实数的绝对值。例如求一个整数或实数的绝对值。例如:Command:(absCommand:(abs -3.14)-3.14)返回:返回:3.143.148)(sin 8)(sin 弧弧度度)功能功能 :求一个求一个以以弧度弧度为参数的为参数的正弦值。例如正弦值。例如:Command:(s
15、inCommand:(sin (*0.5 pi0.5 pi))返回:返回:1.01.09)(cos 9)(cos 弧度弧度)功能功能 :求一个求一个以以弧度弧度为参数的为参数的余弦值。例如余弦值。例如:Command:(cosCommand:(cos (*0.0174533 30)(*0.0174533 30)返回:返回:0.8660.8662.4 基本函数10)(atan 10)(atan 数数 1 1 数数 2 2)功能功能 :求数求数 1/1/数数 2 2 或数或数 1 1 的反正切值。例如的反正切值。例如:Commad:(aCommad:(atantan 0.707 0.707 0.7
16、070.707)返回:返回:0.78540.7854注意:返回的为弧度值。注意:返回的为弧度值。Command:(atanCommand:(atan 1.0)1.0)返回:返回:0.78540.785411)(11)(sqrsqrt t 数数)功能功能:求一个整数或实数的平方根。例如求一个整数或实数的平方根。例如:Command:Command:(sqrsqrt t 256)256)返回:返回:16.016.012)(min 12)(min 数数 1 1 数数 2 2 )功能功能:求表中所有整数或实数的最小值。例如求表中所有整数或实数的最小值。例如:Command:(minCommand:(m
17、in 1.44 1.44 -2.1-2.1 -3.6)-3.6)返回:返回:-3.6-3.6 13)(max13)(max数数 1 1 数数 2 2 )功能功能 :求表中所有整数或实数的最大值。例如求表中所有整数或实数的最大值。例如:Command:(mCommand:(maxax -2.5 -2.5 2.12.1 7.2 7.2 3.43.4 5.8 5.8)返回:返回:7.27.22.4 基本函数 14)(expt 14)(expt 底数底数幂幂)功能功能 :求底数的求底数的幂幂次方。例如次方。例如:Command:(exptCommand:(expt 2.02.0 3)3)返回:返回:8
18、.08.015)(log 15)(log 数数)功能功能 :求一个数的自然对数。例如求一个数的自然对数。例如:Command:(logCommand:(log 2)2)返回:返回:0.693147 0.693147 16)(16)(gcdgcd 数数 1 1 数数 2 2 )功能功能 :求数求数 1 1 和数和数 2 2 两个整数的最大公约数。例如两个整数的最大公约数。例如:Command:(gcdCommand:(gcd 144144 16)16)返回:返回:161617)(17)(remrem 数数 1 1 数数 2 2 )功能:求数功能:求数1 1除以数除以数2 2的余数。例如:的余数。
19、例如:CommandCommand:(remrem 162 38)162 38)返回:返回:10102.4 基本函数例例1.1.编程计算普通松联接螺栓的最小直径编程计算普通松联接螺栓的最小直径已知计算公式为已知计算公式为 :2.4 基本函数编程如下:编程如下:(defundefun bolt(F b)bolt(F b)(setqsetq d1min(d1min(sqrtsqrt(/(*4 f)(*pi b)(/(*4 f)(*pi b)(princprinc“n“n松螺栓最小直径松螺栓最小直径d1=”)(d1=”)(princprinc d1min)d1min)(princprinc);end
20、 );end Command:(boltCommand:(bolt 5800 180)5800 180)返回:返回:松螺栓最小直径松螺栓最小直径d1=6.4052d1=6.4052(二)(二)赋值与求值函数赋值与求值函数函数名函数名 格格 式式 功功 能能1)setq1)setq(setqsetq 变量变量11表达式表达式1 1 变量变量22表达式表达式2)2)仅对表达式求值,并将表仅对表达式求值,并将表达式的值赋给前面相应的达式的值赋给前面相应的变量变量2)set2)set(set(set 变量变量 表达式表达式)对变量和表达式分别求值,对变量和表达式分别求值,且变量的求值结果仍为变且变量的
21、求值结果仍为变量,再将表达式的值赋给量,再将表达式的值赋给该变量。该变量。3)eval3)eval(evaleval 表达式表达式)对表达式的求值结果再求对表达式的求值结果再求值。返回最后的求值结果。值。返回最后的求值结果。2.4 基本函数赋值与求值函数举例赋值与求值函数举例:(setqsetq x1 2.5 y1(+x1 3.2)x1 2.5 y1(+x1 3.2)返回返回:5.700:5.700(setqsetq x 2 y 4.0 pt (list x y)x 2 y 4.0 pt (list x y)返回:返回:(2 4.000)(2 4.000)(setqsetq d c)d c)返
22、回:返回:C C 表明变量表明变量d d的值为变量的值为变量C C(set d 2)(set d 2)返回:返回:2 2 表明变量表明变量C C的值为的值为2 2(evaleval d)d)返回:返回:2 2(evaleval “(+3 4)”)“(+3 4)”)返回返回:“(+3 :“(+3 4)”4)”(evaleval(+3 4)(+3 4)返回:返回:7 72.4 基本函数1)(type1)(type项项)功能:判断所列功能:判断所列 的数据类型,其值为下列类型之一:的数据类型,其值为下列类型之一:INT(INT(整型数整型数),REAL(REAL(实型数实型数),SYM(SYM(符号
23、符号),STR(STR(字符串字符串),LIST(LIST(表表),SUBR(SUBR(内部函数内部函数),FILE(FILE(文件描述符文件描述符)。例如:。例如:CommandCommand:(type(type(setqsetq a 25)a 25)返回:返回:LISTLISTCommandCommand:(type*)(type*)返回:返回:SUBRSUBRCommandCommand:(type(setqtype(setq f(open f(open jq.txtjq.txt r)r)返回返回:FILE FILE 2)(fix2)(fix数数)功能:将实型数去掉小数部分化为整型数。
24、例如:功能:将实型数去掉小数部分化为整型数。例如:CommandCommand:(fix 2.13)(fix 2.13)返回:返回:2 2(三三)数据类型转换函数数据类型转换函数(1010种)种)2.4 基本函数3)(flaot3)(flaot数数)功能:将整型数化为实型数。例如:功能:将整型数化为实型数。例如:CommandCommand:(flaotflaot 2)2)返回:返回:2.02.0 4)(itoa 4)(itoa整型数整型数)功能:将整型数化为字符串。例如:功能:将整型数化为字符串。例如:CommandCommand:(itoaitoa 28)28)返回:返回:28 28 5)
25、(atoi5)(atoi字符串字符串)功能:将字符串化为整型数。例如:功能:将字符串化为整型数。例如:CommandCommand:(atoiatoi 415)415)返回:返回:4154156)(atof6)(atof字符串字符串)功能:将字符串化为实型数。例如:功能:将字符串化为实型数。例如:CommandCommand:(atofatof 5)5)返回:返回:5.05.02.4 基本函数 7)(rtos7)(rtos数数)功能:按功能:按AutoCADAutoCAD系统变量系统变量LUNITSLUNITS和和LUPRECLUPREC定义的定义的 记数方式和精度将数转化为字符串。例如:设记
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 AutoLISP 语言 基础 课件
限制150内