LIS程序课件PPT课件.ppt
《LIS程序课件PPT课件.ppt》由会员分享,可在线阅读,更多相关《LIS程序课件PPT课件.ppt(168页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章绪论LISP(LISt Processing language)是一种计算机表处理语言,是迄今为止人工智能领域应用最为广泛的一种程序设计语言。60年由美国麻省理工学院的J.McCarthy提出。LISP语言又称符号式语言(Symbolic Language)、函数式语言(functional language)。在LISP语言中,最基本的数据类型是符号表达式(symbolic expression),LISP程序看起来是一个一个的函数调用。LISP语言的一个突出的特点是程序和数据二者都取符号表达式的形式,也就是说一个LISP程序可以把另一个LISP程序作为它的数据处理。LISP语言的优势
2、是处理表形式的数据(知识工程),知识可方便地表达成表的形式,这就是LISP语言在人工智能科学领域广泛应用的原因。AutoLISP语言是一种嵌入在AutoCAD内部的LISP编程语言,从AutoCAD2.18版开始提供,从AutoCAD14有了Visual LISP的试用版,AutoCAD2000有了VLISP1.0版。为了提高AutoCAD的使用效率,需要对其进行二次开发,以满足具体的应用要求,从早期的DXF文件(利用其他语言开发)、SCR文件(批处理)过渡到AutoLISP。AutoCAD二次开发工具的发展:由于AutoCAD实体数据是以表的形式存储的,VLISP语言二次开发效率最高。VLI
3、SP及其相关的内容:二次开发一个重要的工作是提取图形数据库数据,分析处理VLISP的开放接口:DOS、其它高级语言、WINDOWS参考书:1.用Visual LISP开发AutoCAD2000应用程序,郭建峰编著,人民邮电出版社。2.AutoCAD2000高级应用与Visual LISP开发宝典,汤峻编著,人民邮电出版社。3.AutoCAD2000帮助。4.AutoLISP教程,刘银远编著,北京希望电脑公司。5.AutoCAD使用手册。没有一本书讲清所有的内容。第二章AutoLISP概述2.0 AutoLISP表达式AutoLISP 程序由一系列表达式组成,在表达式中又包含其它数据类型,表达式
4、和数据类型是AutoLISP程序的基础,AutoLISP没有语句的概念。AutoLISP 表达式的格式如下所示:(函数 参数)每个表达式都以一个左括号开始,由一个函数名和一个该函数的可选参数组成,并且每个参数都可以是一个表达式。表达式以右括号结束。每个表达式都返回一个可由外层表达式使用的值。最后表达式的值返回给调用表达式。AutoLISP程序可以在AutoCAD命令行提示符、VLISP控制窗口的提示符下输入,也可输入到文件中,然后加载。例如,如下代码样例调用了三个函数:(fun1(fun2 参数)(fun3 参数)例如:_$(*2 27 2)108例如:_$(*2(+5 10)30如果输入的闭
5、(右)括号数量不对,AutoLISP 将显示如下提示:(_此提示中开括号的数目表明有多少层开括号没有闭合。如果出现此提示,用户必须输入所需数目的闭括号后才能对表达式求值。_$(*2(+5 10(_)30常见错误是忽略了文本字符串中的双引号()。在这种情况下,右括号被解释为字符串的一部分,而不会被用来和开括号配对。要改正此错误,可按 SHIFT+ESC 键取消该函数,然后重新输入正确的表达式。2.1 AutoLISP的数据类型整型(INT)、实型(REAL)、字符型(STR)、符号(SYM)、表(LIST)、内部函数(SUBR)、文件描述符(FILE)、实体名(ENAME)、选择集(PICKSE
6、T)、函数分页表(PAGETB)、VLA对象(Visual Lisp Activex)。2.1.1整型整数由数字组成,不包含小数点。AutoLISP 的整数是 32 位带符号的数,取值范围从+2,147,483,647 到-2,147,483,648(注意,getint 函数只接受 16 位的数,即+32767 到-32678)。当用户在 AutoLISP 表达式中直接使用整数时,该值被称为常量。数字 2、-56 和 1,200,196 都是有效的 AutoLISP 整数。如果输入的数超出了允许的最大整数(导致整数溢出),AutoLISP 会将整数转换为实数。然而,如果对两个有效整数执行算术运
7、算,其结果超出了允许的最大整数,得出的数是无效的。下面样例说明 AutoLISP 如何处理整数溢出。最大的正整数保留其值:_$2147483647 2147483647如果输入一个大于允许最大值的整数,AutoLISP 将其值返回为实数:_$2147483648 2.14748e+009对两个有效整数进行算术运算,但造成了整数溢出,产生无效结果:_$(+2147483646 3)-2147483647此样例得出的结果显然是无效的,因为两个正数相加得出了负数。但请注意下列运算如何产生有效的结果:_$(+2147483648 2)2.14748e+009在这个例子中,AutoLISP 先将 214
8、7483648 转换为一个有效的实数,再对其作加法运算。得出的结果是一个有效的实数。最大的负整数值保留其值:最大的负整数值保留其值:有问题:有问题:-2147483648为最小负数为最小负数_$-2147483647 -2147483647如果输入一个大于可允许的最大负整数值的负整数,如果输入一个大于可允许的最大负整数值的负整数,AutoLISP 将其将其值返回为实数:值返回为实数:_$-2147483648-2.14748e+009下面样例可以成功算出结果,因为 AutoLISP 先将溢出的负整数转换为一个有效的实数:_$(-2147483648 1)-2.14748e+0092.1.2实数
9、实数是带有小数点的数。在-1 和 1 之间的实数必须以零开始。实数是以双精度浮点格式存储的,可以提供至少 14 位精度。注意 Visual LISP 不显示所有有效位。实数可以用科学记数法表示,科学记数法格式中包括可选的 e 或 E 及其后面的指数(例如,0.0000041 与 4.1e-6 相同)。数字 3.1、0.23、-56.123 和 21,000,000.0 都是有效的 AutoLISP 实数。2.1.3 字符串字符串是在双引号中的一组字符。在用引号引起来的字符串中,用反斜杠()字符可以添加控制字符(或换码代码)。当用户在 AutoLISP 表达式中直接使用用引号引起来的字符串时,该
10、值被称为文字字符串或字符串常量。“string 1”和“nEnter first point:”都是有效的字符串。表示字符”表示字符“”“r表示回车n表示换行nnn 表示八进制代码为nnn的ASCII字符字符串常数的最大长度为100,但赋给一个符号的字符串长度没有这个限制。下列都是合法的字符串“nEnter first point:”注意换行的写法“ABC”D”注意字符串中含“的写法“c:Autocad2000FONTSTEXT.SHX”注意目录的写法“”空串2.1.4 符号类似其它语言中的变量,但没有固定的数据类型,由赋给它的数据类型决定。符号最大长度为100个字符,AutoLISP 通过符
11、号来引用数据。符号名不区分大小写,可以由字母、数字和可打印字符的任何序列组成,但下列字符除外:不能用于符号名的字符((开括号)表的定界符)(闭括号)表的定界符.(句号)点对标记(单引号)quote函数缩写”(双引号)字符串定界符;(分号)注释符号 空格 数据分隔符符号名不能只由数字字符组成,不要求以字母开头。使用系统保留字(如内部函数名)作自定义符号,会改变系统定义,使系统失败,符号也不宜使用“?”“!”“”“”等控制字符,同时VLISP提供了三个预定义变量。PAUSE 定义为由一个双反斜杠()字符构成的字符串“”。此变量与 command 函数配合使用,用于暂停正在执行的命令,等候用户输入。
12、PI 定义为常量(pi)。其值近似等于 3.14159。T 定义为常量 T。用作非 Nil 值。要想指定 AutoLISP 如何响应修改保护符号的尝试,请从 Visual LISP 菜单中选择“工具”“环境选项”“基本选项”。2.15 原子原子是指不可再分的元素。例如平面内一点的坐标可以分为两个元素,即x坐标值,y坐标值,而x、y不可再分,所以称为原子。符号和常数统称为原子,而原子和表统称为表达式。T和nil是两个特殊原子。下面一些字符将终止一个原子或分隔多个原子。((开括号)表的定界符)(闭括号)表的定界符(单引号)quote函数缩写(双引号)字符串定界符;(分号)注释符号 空格 数据分隔符
13、例如 (SETQ A ABC”)与(SETQ AABC)等价2.1.6表表是放在一对圆括号中的一个元素或用空格分隔的多个元素,元素可以是原子或表。表的各元素类型可以不相同,这一点不同于其他语言中的一维数组,例如二维表:(20.0 82.0)三维表:(1.0 2.0 0.0)函数 :(+1 2)表有两种基本类型:标准表和引用表。一个引用表在表的前面冠以引用符号(撇号或quote)的表。引用符号告诉AutoLISP对表不求值。如果一个表作为数据处理,而不是作为函数调用,就应作为引用表。对于标准表,表的第一个元素的值必须是一个合法的已经存在的AutoLISP的函数定义。例如 (setq a (1.0
14、 2.0 0.0)表的顶层是一个标准表,参数是一个引用表。点对是一个特殊的表,有两个元素组成,中间有句号分开,在存储实体图形数据的关联表中使用。例如 (8 .“EWB”)空表用()或nil表示,nil即是原子又是表。实体名和选择集等数据类型在以后介绍。2.1.7测试数据类型函数TYPE 调用格式为(type 数据项)例如 (type 1)返回 INT (type abc)返回 SYM2.1.8一个AutoLISP程序的例子AutoLISP程序可以在AutoCAD命令行提示符、VLISP控制窗口的提示符下输入(一行输不完,按ctrl+Enter键,在下行继续输入),也可输入到文件中(通常扩展名为
15、.LSP),然后通过load函数加载。;在屏幕上显示ASCII(30-90)(defun c:prnas(/as)(setq as 30);给as赋值为30 (while(=as 90);循环 (princ(chr as);显示到屏幕 (terpri);换行 (setq as(1+as);设as为下一个ASCII值 );结束while)假设上面的文件为c:testtest1.lsp,加载和运行程序如下:加载 _$(load“c:/test/test1”)扩展名可不写 或_$(load“c:testtest1”)运行 command:prnas 或_$(c:prnas)如果上面的LISP程序的第
16、二行为(defun prnas(/as)则运行程序为 command:(prnas)或 _$(prnas)第三章AutoLISP的基本函数AutoLISP没有语句的概念,运算符、控制结构和循环结构由函数实现。3.1赋值与求值函数3.1.1赋值函数setqAutoLISP 变量的数据类型采用指定给它的值的数据类型。在为变量指定新值前,该变量将一直保留原来的值。可以用 AutoLISP setq 函数为变量赋值。(setq variable_name1 expr1 variable_name2 expr2.)setq 函数可以给多个变量赋值,但只返回最后一个表达式的值。如果在 Visual LIS
17、P 控制台提示中使用 setq,函数结果将显示在控制台窗口中。_$(setq val 3 abc 3.875)3.875 _$(setq layr EXTERIOR-WALLS)EXTERIOR-WALLS _$_$(setq c(setq a 2 b 3)_$3_$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 只计算第二个参数的值。_$(set
18、q d c)C_$(set d 2)2_$c2_$注意:使用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 pt(1.0 1.0 1.0);正确(setq pt (1.0,1.0,1.0);错误3.1.4再求值函数eval求表达式
19、值的值,也就是说求两次值。(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)_$例:看两个例子的区别_$(setq add+)#_$(add 1 2)3_$(setq add+)+_$(eval add)1 2)33.2数值函数包含基本算术函数、三角函数以及位操作布尔函数。大部分函数返回值是整数还是实数遵循下列规则。1
20、.若参数表中的所有参数都为整型,则AutoLISP求值器对表作整数运算,返回整数值。2.若参数表中有一个参数为实型,则AutoLISP求值器对表作浮点运算,返回实型值。3.若参数多于两个,从左到右计算。数学函数函数 说明(+number number.)返回所有数值的总和(-number number.)从第一个数值中减去第二个和后面的数值,返回差值(*number number.)返回所有数值的乘积(/number number.)用第一个数值除以后面其他数值的乘积,返回商值(int)返回参数的按位非(即 1 的补码为0)(1+number)返回参数加 1 后的结果(1-number)返回参
21、数减 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.)返回一组整数逻辑按位
22、与(AND)的结果(logior int int.)返回一组整数逻辑按位或(OR)的结果(lsh int numbits)返回一个整数进行指定位逻辑移位后的结果(max number number.)返回给定的数中的最大值(min number number.)返回给定的数中的最小值(minusp number)检查一个数是否是负数(rem num1 num2.)用第一个数除以第二个数,返回余数(sin ang)以实数形式返回一个以弧度表示的角度的正弦值(sqrt number)以实数形式返回一个数的平方根(zerop number)检查一个数的值是否为 03.2.1算术运算函数1.函数 _$
23、(+1 2 3);含义 1236_$(-5 1 2);含义 5122_$(-5);注意:当减法函数只有一个参数时,给数取相反数-5_$(*2 3 4.0);含义 234.024.0_$(/2 3 2.0);含义 2/3/2.00.333333 ;注意其它高级语言的0.0_$2.加1减1函数 1 1 常用在循环中,注意:加减号与1之间无空格(1+n)等同(+1 n)(1-n)等同(-n 1)3.求余数(rem num1 num2.)若参数多于两个时,前面两个数相除取余数在与后面的数相除取余数。_$(rem);注意:无参数0_$(rem 41 5-4);等同(rem(rem 41 5)-4)1_$
24、(rem(rem 41 5)-4)1若余数非零,则符号与数num1的符号相同。_$(rem-6 4)-2_$(rem 6-4)24.最大值和最小值(max number number.)返回给定的数中的最大值(min number number.)返回给定的数中的最小值_$(max 1.0 2)2.0 最大值是2,但函数返回实数2.05.(gcd int1 int2)返回两个整数的最大公约数6.(exp number)返回常数 e(实数 2.718282.)的指定次幂的值7.(expt base power)返回一个数的指定次幂的值8.(log number)以实数形式返回一个数的自然对数9.
25、(sqrt number)以实数形式返回一个数的平方根10.(abs number)返回参数的绝对值3.2.2三角函数参数可以是实型或整型,但返回值总为实型,角度以弧度表示。(cos ang)返回一个以弧度表示的角度的余弦值(sin ang)以实数形式返回一个以弧度表示的角度的正弦值(atan num1 num2)返回一个数的反正切值(以弧度为单位)如果仅提供一个参数 num1,本函数返回数 num1 的以弧度为单位的反正切值。如果提供了两个参数 num1 和 num2,本函数返回 num1/num2 的以弧度为单位的反正切值。如果 num2 为 0,该函数返回正的或负的 1.570796 弧
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LIS 程序 课件 PPT
限制150内