Lisp语言的学习和使用.doc_第1页
Lisp语言的学习和使用.doc_第2页
Lisp语言的学习和使用.doc_第3页
Lisp语言的学习和使用.doc_第4页
Lisp语言的学习和使用.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字测图原理与应用Lisp语言的学习和使用主要内容 AutoLisp语言介绍 AutoLisp语言的基本知识 赋值与数值计算函数 自定义函数 程序分支与循环函数 逻辑运算函数 字符串与类型转换函数 表处理函数 交互数据输入函数及相关的计算函数 与文件有关的函数 实体和设备访问类函数 其它函数一、 AutoLisp语言介绍LISP(List Processing)是一种计算机的表处理语言。LISP语言是人工智能领域中广泛应用的一种程序语言。AutoLISP语言是一种运行在AutoCAD环境下的LISP编程语言,或称为AutoCAD的一种嵌入式语言。它采用了与CommandLISP(一种通用的LISP语言版本)相近的语法及习惯约定,并吸收了LISP语言的主要函数,同时增加了针对AutoCAD特点的许多功能,如:可以把AutoLISP和AutoCAD的绘图命令透明地结合起来,使设计和绘图完全融为一体。利用AutoLISP语言编程可以实现对AutoCAD当前图形数据库进行直接访问和修改。在LISP语言中,最基本的数据类型是符号表达式。LISP语言的特点是程序和数据都采用符号表达式的形式,即一个LISP程序可以把另一个LISP程序作为它的数据进行处理。因此使用LISP语言编程十分灵活,看起来是一个一个的函数调用。支持递归定义也是Auto LISP语言的重要特性。AutoLISP语言是提供给用户的主要二次开发工具之一。用AutoLISP语言编写应用程序,可以为AutoCAD增加新的命令或修改AutoCAD,以适应用户的特殊需要。AutoCAD软件的开发者AutoDesk公司许诺,将保证今后AutoCAD软件对AutoLISP语言的支持。掌握使用和编制AutoLISP应用程序的方法和技术将大大提高用户的工作效率和二次开发水平,增强AutoCAD的灵活性,并将得到长期、稳定的技术支持。二、 AutoLISP语言的基本知识2.1 AutoLISP语言的特性AutoLISP语言是一种解释型语言,它的特点如下:1 解释型语言编程语言有两种基本类型:解释型和编译型。AutoLISP属于解释型语言。在解释型语言中,用户编写的源程序直接由解释器解释并执行。而在编译型的语言中,源代码首先要编译为一种中间格式(目标文件),然后再与所需的库文件链接,生成机器码可执行文件。AutoCAD本身是用编译型语言写成的。解释型语言的主要优点是在执行这种语言编写的程序之前不需要中间步骤,用户可以交互、独立于其它部分来试验或验证程序段或程序语句,而不需像编译型语言那样,每当试验程序时,要全部地编译和链接整个程序。2 平台和操作系统独立AutoLISP语言的另一个优点是可移植性。AutoLISP程序可以在运行于多种支持平台(如Windows、DOS、UNIX和Macintosh等)上的AutoCAD中执行而与CPU或操作系统无关。3 AutoCAD的版本独立AutoLISP程序除平台和操作系统独立外,AutoLISP的设计还考虑了向下的兼容。这样,任一版本AutoCAD编写的AutoLISP程序一般不加修改就可以在以后版本的AutoCAD中运行。4 AutoLISP与主流编程语言的比较AutoLISP与目前使用比较多的编程语言(如C/C+,BASIC等)之间有一些明显的差别。具体可体现在下述几个方面:(1)AutoLISP与其它大多数语言之间最重要的差别是它用表(List)存放数据。AutoLISP没有数组、联合、结构及记录,所有复杂的数据集均由表来表示和处理。(2)AutoLISP的变量没有明确的类型。LISP变量的类型是在赋值时动态确定的。(3)AutoLISP不需要预先声明变量或函数。(4)与C/C+,BASIC等语言不一样,LISP没有语句、关键词及运算符。它是函数定位的语言,其所有运算都是由函数调用完成。特点AutoLISPC/C+VB声明无有无数组无有有可变变量类型有无有结构类型无有有用户类型无有有解释型是否否2.2 AutoLISP语言中的数据类型AutoLISP支持下述10种数据类型:l 整型数l 实型数l 字符串l 符号l 表l 文件描述符l AutoCAD实体名l AutoCAD选择集l 内部函数(AutoLISP子程序)l 外部函数(ADS、ARX函数)整型数整型数是一种不带小数点的数字,它可由0,1,2,9,共12个字符组成,例如:123,76,322等。实型数实型数是带有小数点的数,它可由0,1,2,9,E,e共14个字符组成。实数有两种表示方法,即十进制表示法和科学计数表示法。例如:十进制表示法:12.3,7.6,3.22科学计数表示法:6.1E5(610000),0.12E2(12),0.45E2(0.0045)字符串字符串(字符串常数)由一对双引号(”)括起来的字符序列组成。这对双引号是字符串的定界符。字符串常数最大长度为132个字符,但表示字符串的符号名所约束的值可以是任意长度,因而可以利用“STRCAT“(字符串拼接)函数无限制地增加其长度。字符串中,同一字母的大小写认为是不同的字符,空格是一个有意义的字符。字符串的长度是指字符串一对双引号之间的字符个数(不包括一对双引号)。如果字符串的定界符之间无任何字符(即”)称为空串,其长度为零。字符串中可以包含ASCII码中任一字符,通用的表示形式为“nnn“,nnn为八进制形式的ASCII码。例如:“101102 103”表示“ABC”,两者的作用完全相同。由于反斜杠“”已作为字符串中的前导转义符,因而当字符串中要使用反斜杠时,必须加转义符,即用双反斜杠“”表示字符串中一个反斜杠“”,也可以用反斜杠的ASCII码表示(即“114”)。同样,由于双引号已作为字符串的定界符使用,因而字符串中的双引号可以用“”或“042”表示。对于一些常用的控制字符,其ASCII代码见下表。字符代码表代码意义等价ASCII码值字符键114”字符”键142eESC键033n换行键012r回车键015tTAB键011例如:下面的表达式表示在显示提示内容前先进行换行,然后再显示字符串内容。 (prompt “nEnter filename:”)或 (prompt “012Enter filename:”)二者效果完全相同。符号AutoLISP中符号用于存储数据,因此“符号”和“变量”这两个词含义相同,可以互相交换使用。符号名可以由除下列6个字符外的任何可以打印的长度不限的字符序列来组成:“(”、“)“、“,”、“”、“”、“;”,当这6个字符中的任一字符在符号名中出现时,将终止符号名。不允许使用数字符号作为第一个字符。下列为合法的符号名:ABC,!A,&AB,A3下列为不合法的符号名:(A),A.B,3A在AutoLISP中符号名的大小写是等价的。LISP中“约束”是指对一对符号和值,当把一个值赋给一个符号时,也即把这个符号约束为那个值。例如:(setq a 6)“!a”将显示6,表示a是一个整数,其值为6。(setq a 6.0)“!a”将显示6.0,表示a是一个实数,其值为6.0。(setq a “6.0”)“!a”将显示6,表示a是一个字符串,其值为“6.0”。表表是指在一对相匹配的左右圆括号之间的元素的有序集合。表中的每一项称为表的元素,表中的元素可以是整数、实数、字符串和符号,也可以是另一个表。为了处理图形中点的坐标,AutoLISP对二维和三维点的坐标按如下规则表示:二维点:以分别代表x,y坐标的两个实数所构成的表(x y)的形式表示,如:(3.21 7.58)三维点:以分别代表x,y,z坐标的三个实数所构成的表(x y z)的形式表示,如:(3.21 7.58 4.68)。表的大小用其长度来度量。长度是表中顶层元素的个数。例如:(setq a 6) 表的长度为3(setq a (+ c (/ d 2) ) ) 表的长度为3表有两种基本类型:标准表和引用表。标准表是从左括号开始到配对的右括号结束。表中的第一个元素(0号元素)必须是一个合法的已存在的AutoLISP函数。引用表是在左括号前加一撇号,表示不对此表作求值处理。符号表达式点对表原子符号、字符串数整数实数文件描述符当AutoLISP打开一个文件时,系统将给该文件赋一个数字标号,在以后要访问该文件时(读或写文件),可利用该文件描述符对指定的文件进行操作。例如:打开一个名为:“myfile.dat”的文件,把打开文件时的文件描述符赋给符号f,再把“This is a sample under AutoLISP.”写入该文件。(setq f (open “c:myfile.dat” “w”) )(print “This is a sample under AutoLISP.” f)实体名实体名是AutoCAD系统在绘图过程中赋予所绘实体的一个数字标号。实际是指向一个AutoCAD系统内部的数据文件的一个指针。例如:(setq elast (entlast) )注:entlast 是获取数据库中最新图元的名称。选择集选择集一个或多个实体的集合。它类似AutoCAD的实体选择过程。在AutoLISP程序中也可以构造一个选择集,并把它赋予一个符号供其它函数使用。例如:(setq ss (ssget “p”)子程序和外部子程序由AutoLISP提供的函数称为子程序(内部函数),外部子程序是由ADSRX或ARX应用程序定义的子程序。2.3 程序结构C,VC,VB等采用“中缀表示法”例如:X3.4AutoLISP采用的是“前缀表示法“例如:(setq x 3.4)表达式X(AB)*C在AutoLISP中表示为:(setq X (* ( + A B) C) )(setq a 2.3 )(setq b 6.7)(+ a b )(defun C:ff(/) (setq a 2.3 ) (setq b 6.7) (setq c (+ a b ) ) )2.4 求值、表达式及变量求值每个LISP程序的核心是一个求值器。求值器读入用户的输入行(一个符号表达式),对其进行计算,然后返回计算结果。AutoLISP的求值过程如下:(1) 整形数、实型数、字符串对、文件指针和子程序以它们本身的值作为结果。(2) 符号以它们当前的约束值作为计算结果。(3) 表根据其第一个元素的类型来进行求值。表达式所有AutoLISP表达式均为下述形式:(function_name arguments)左边以左括号“(”开始,其后由函数名和函数的参数组成,最后以右括号“)”结束。每个表达式都有一个返回值。表达式的参数可以是一个表达式,它的返回值将被外层表达式使用。变量AutoLISP的变量有四种类型:整型数、实型数、字符串和表。变量的类型根据所赋的值自动确定,并一直保持到下一次再赋值为止。AutoLISP用setq函数给变量赋值,格式如下:(setq 变量名 值)其中参数“值”可以是一个表达式,执行结果返回变量的值。例如:(setq x 5) x=5 整型数(setq x 5.0) x=5.0 实型数(setq x “Hello”) x=”hello” 字符串(setq x (3.7 6.5) ) x=(3.7 6.5) 表当要用变量来响应AutoCAD提示时,只需在变量名前加一个“!”即可。例如:command:(setq p1 (100 100) )(setq p2 (200 200) )(command “line” p1 p2 )函数:(defun C:aa1(/) (setq p1 (100 100) (setq p2 (200 200) (command line p1 p2)或者:command:lineFrom point:!p1三、 赋值与数值计算函数 1. 赋值函数 (set 符号 表达式)与(setq 符号1 表达式1)(setq a 3.0)(setq a 3.0 b 15)(setq L (a b)区别: set函数对第一个变元(符号)进行计算,并可将一个新值间接赋给另一个符号,而setq则不然。n (setq a b) 将变量名b赋给变量an (set a 100) 返回100,且b的值为100 若将set函数的第一个变元加上引用符号,则等价于setq函数。n (setq a 3.0) 等价于 (set a 3.0) 或 (set (quote a) 3.0)2. 加函数( 数 数 )(+ 2 9)(+ 2 9 8 1 )3. 减函数( 数 数 )(- 2 9)(- 2 9 8 1 )4. 乘函数(* 数 数 )(* 2 9)(* 2 9 8 1 )5. 除函数(/ 数 数 )(/ 8 4)(/ 24 4 2)6. 加1函数(1 数 数 )(1+ 3 )(1+ -7)7. 减1函数(1 数 数 )(1+ 3 )(1+ -7)8. 求绝对值函数(abs 数)(abs -7)9. 求最大值函数(max 数 数 )(max -7 16)10. 求最小值函数(min 数 数 )(min -7 16)11. 平方根函数(sqrt 数)(sqrt 16)12. 乘方函数(expt 数 数)(expt 2 4)13. 求e的任意次方函数(exp 幂)(exp 2.2)14. 对数函数(log 数)(log 4.5)15. 正弦函数(sin 角)(sin pi)(sin (/ pi 2)16. 余弦函数(cos 角)(cos pi)(cos (/ pi 2)17. 反正切函数(atan 数1 数2)(atan 0.5)(atan 1.0 2.0)18. 求余数函数(rem 数1 数2)(rem 8 3)(rem 3 4.0)19. 最大公约数函数(gcd 数1 数2)(gcd 12 20) (gcd 81 57)四、 自定义函数 defun函数格式:(defun 符号 变元表(形参/局部变量) 表达式 )符号为所要定义的函数名称,将来用户在使用这一自己定义的函数时就用次函数名称调用。变元表被一个前后均有空格的斜杠符号“/”分成两个部分(形参/局部变量):前一部分为形参部分,在调用函数时接受参数传递而转换为实参;后一部分为局部变量,仅用于函数内部,不参与参数传递。注:(1) 变元表可以是空格,此时在调用函数时无参数传递。(2) 变元表中的形参与局部变量均只在所定义的函数中起作用,甚至可以与某些外部变量同名,而不会对外部变量造成影响。 用defun函数定义AutoCAD新命令格式:(defun C:命令名 变元表(/局部变量) 表达式 )命令名为所要定义的新命令的名称,其前必须有“C:”,命令名的后面必须带有一张没有形参的变元表。画一个正方形的命令:(defun square (a b c/ pt1 pt2 pt3 pt4 len) (setq pt1 (getpoint Low left corner:) (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)五 程序分支与循环函数1 条件函数(if 条件 式1 式2) (if (= 1 3) yes no) (if (= 2 (+ 1 1) yes no)2. 分支函数 (cond (条件1 式1 ) (条件2 式2 ) )例如: (cond (minusp a) (- a) (T a) ) 或(cond (minusp a) (- a) ) (T a)3. 重复函数(repeat 次数 式1 式2 )(defun C:add1( / )(setq s 0 a 1)(repeat 100 (setq s (+ s a) (setq a (1+ a)(print s)4循环函数(while 条件 式1 式2 )(defun C:add2( / )(setq s 0 a 1)(while ( a 101) (setq s (+ s a) (setq a (1+ a)(print s)5 求多个表达式值的函数 (progn 式1 式2 )(defun C:progn( / ) (if T (progn (setq a 10) (setq b (+ a 20) ) (print b) ) )六、 逻辑运算函数 AutoLISP用T表示逻辑真,用NIL表示逻辑假。AutoLISP的逻辑运算分为两种:一种是数值的逻辑运算,它将数值化为二进制数,然后按位进行逻辑运算,仍以数值为其结果(返回值);另一种是根据函数的要求对后面的表达式进行测试,若满足要求,则函数返回T(逻辑真),若不满足要求则返回NIL(逻辑假)。1. 逻辑“与”函数(and 表达式 )(setq a 5) (setq b nil) (setq c “st”)(and a c)(and b c) 2. 逻辑“或”函数(or 表达式 )(or b c)(or 0 () b)3. 逻辑“非”函数(not 表达式 )(not b)(not c)4. 等于函数(= 原子 原子 )(= 4 4.0)(= 4 4 3)(= “me” “me”)(= “me” “you”)5. 不等于函数(/= 原子 原子 )(/= 4 4.0)(/= “me” “me”)6. 小于函数( 原子 原子 )( 10 20)( “b” “c” )( 2 3 4 4)7. 小于等于函数(= 原子 原子 )(= 2 3 4 4) ( 原子 原子 )( 20 10 )( “e” “c” )9. 大于等于函数(= 原子 原子 )(= 8 5 4 4)(= 2 4 6.0 8 78 )10. 原子测试函数(atom 项)若“项”为表,则返回NIL,否则返回T。任何不是表的元素都被认为是原子。(setq a (x y z)(setq b a )(atom a)(atom b)(atom a)11. 表测试函数(listp 项)若“项”为表,则函数返回T;否则返回NIL。(listp a)(listp a)(listp (x y)12. 原子值测试函数(boundp 项)若原子有约束值,则返回T,否则返回NIL。若某原子的值为表,则被认为该原子无值。(boundp a)(boundp a)(boundp b)13. 空测试函数(null 项)若“项”的约束值为空(NIL),则函数返回T;否则返回NIL。(null a)(null a)(null ()14. 数值测试函数(numberp 项)若“项”为数值(整数或实数),则函数返回T;否则返回NIL。(setq a 123)(setq b a)(numberp a)(numberp b)15. 负值测试函数(minusp 项)若“项”的值为数值且为负数,则函数返回T;否则返回NIL。(minusp -1)(minusp 32.1)16. 零值测试函数(zerop 项)若“项”的值为数值且为零,则函数返回T;否则返回NIL。(zerop -0.1)(zerop 0.0)17. 相同表达式测试函数(eq 式1 式2)若“式1”与“式2”完全相同,则函数返回T;否则返回NIL。(setq f1 (a b) (setq f2 (a b)(setq f3 f2)(eq f1 f2)(eq f2 f3)该函数测试两个表达式是否受相同的目标约束。18. 相等测试函数(equal 式1 式2)该函数测试两个表达式的值是否相等,相等返回T;否则返回NIL。(equal f1 f2) (equal f2 f3) 19. 字符匹配测试函数(wcmatch 字符串 模式)该函数按通配符的匹配模式测试字符串与模式是否相同,若相同该函数返回T;否则返回NIL。(wcmatch “Name” “N*”)(wcmatch “Name” “*b*”)七 字符串与类型转换函数该类函数可以对字符串进行处理,对数据进行转换,对数值进行单位制的转换,以及对点进行坐标系的转换等。1. ASCII码转换函数(ascii 字符串 )(ascii “A”)(ascii “Big”)2. 字符转换函数(chr 字符串 )(chr 65)(chr 66)3. 字符串长度函数(strlen 字符串 )(strlen “about”)(strlen “a” “b” “c”)(strlen “”)4. 字符串连接函数(strcat 字符串 )(strcat “a” “about”)(strcat “a” “b” “c”)5. 求子字符串函数(substr 字符串 起点 长度)(substr “abcde” 2 1) (substr “abcde” 3 2)(substr “abcde” 2 )6. 字符串大小写函数(strcase 字符串 方式)(strcase “Sample” T)(strcase “Sample”)7. 整型变实型函数(float 数)(float 3)8.实型变整型函数(fix 数)(fix 6.5)9. 整型变字符串函数(itoa 数)(itoa 65) 10. 字符串变整型函数(atoi 字符串)(atoi “1998”)(atoi “19.98”)11. 字符串变实型函数(atof 字符串)(atof “1998”)(atof “19.98”)八、表处理函数 该类函数可以对表进行取原子、测表长和替换元素等多种操作。1. 引用函数(quote 表达式)该函数返回未经计算的表达式。该函数的作用是告诉AutoLISP的求值程序不要对后面的表达式求值。 (quote (x y z) (quote a)2. 取表中第一个元素的函数(car 表 )(car (a b c)(car (a b) c)(car ()3. 取子表函数(cdr 表 )(cdr (a b c)4. 取表中最后一个元素函数(last 表 )(last (a b c)5. 取表第n个元素函数(nth n 表 )(nth 2 (a b c d e )(nth 0 (a b) c (d e)6. 测表长函数(length 表 )(length (a b c)7. 建立表的函数(list 表 )(list (a b c) a 1 b) 结果:(A B C) A 1 B)8. 连接表的函数(append 表1 表2 )(append (a b) (c d) 结果: (A B C D)(append (a) (b) (c) (d) 结果:(A) (B) (C) (D)9. 向表中添加元素的函数(cons 新元素 表 )(cons a (c d) 结果: (A C D)(cons (a b) (c d) 结果:(A B) C D)10.表倒置函数(reverse 表 )(reverse (a b c)九、交互数据输入函数及相关的计算函数 本节所介绍的函数具有从键盘和光标设备等输入装置读入数据的功能。同时也介绍了对这些数据进行相关计算的一些函数。1. 整型数输入函数(getint 提示)该函数等待用户输入一个整型数,并返回该整型数。提示部分可有可无。例如:(setq num (getint)(setq num (getint “Enter a number:”)2. 实型数输入函数(getreal 提示)该函数等待用户输入一个实型数,并返回该实型数。它和getint的用法完全相同。3. 字符串输入函数(getstring cr 提示)该函数等待用户输入一个字符串,并返回该字符串(最大长度为132个字符)。如果提供了cr且cr不为NIL,则输入的字符串中可以有空格,此时只有用回车来终止输入,否则可以用空格来终止输入。例如:(setq s (getstring “Whats your name?”)用户输入:Xiaosan 返回 “Xiaoshan“(setq s (getstring T “Whats your name?:”)用户输入:Zhang Xiaoshan 返回 “Zhang Xiaoshan “4. 点输入函数(getpoint 基点 提示)该函数等待用户输入一个点。用户可用键盘输入点的坐标或用光标选点的方式输入一个点。若有基点,则AutoCAD会从该点向当前的光标位置画一条可拖动的直线。例如:(setq p (getpoint “Where?”)(setq p (getpoint (2.0 3.6) “Second point:”)5. 距离输入函数(getdist 基点 提示)该函数等待用户输入一个距离值或用光标输入两个点,函数将返回两点间的距离值。若有基点,则只需再输入一个点,该点与基点间的距离就是输入的值。例如:(setq dist (getdist (3.5 5.1) “请输入距离值:”)6. 矩形对角点输入函数(getcorner 基点 提示)该函数等待用户输入一个点,并将该点返回。与getpoint函数不同的是它必须有基点,且当用户移动光标时,屏幕上画一个由基点和当前光标点为两个对角点的矩形。7. 角度输入函数(getangle 基点 提示)该函数等待用户输入一个角度,并将该角度以弧度值返回。Getangle在度量角度时,以变量ANGBASE设置的当前角度为零弧度,角度按逆时针方向为正。用户可以用键盘输入一个数值来指定一个角度。也可用指定屏幕上两个点的方式输入一个角度,此时两点间连线与零度基准线的夹角就是输入的角度。若指定了“基点”,则可用输入一个点的方式来获取角度。后两种方式中屏幕上都会出现拖动线。8. 方位角输入函数(getorient 基点 提示)该函数与getangle非常类似,唯一不同的是getorient度量角度的零度基准方向是水平向右的。在需要知道相对角度(如点转过的角度)的情况下应使用getangle,而在需要知道绝对角度(如直线的方位)的情况下应用getorient。9. 求方位角输入函数(angle 点1 点2)该函数返回UCS(用户坐标系)中两点连线的方位角。该角度从当前作图平面的X轴正向开始,按逆时针方向计算。返回值为弧度。例如:(angle (1.0 1.0) (1.0 4.0) (angle (5.0 1.33) (2.4 1.33) 10. 求两点间距离函数(distance 点1 点2)该函数返回两个三维点之间的距离。例如:(distance (1.0 2.5 3.0) (7.0 2.5 3.0)11. 求另一点坐标函数(polar 点 角度 距离)该函数可以根据一个已知点求出另一个点,并返回所求的点。其变元中,“点”是已知点,“角度”是另一点所在的方位,“距离”为两点间距离。例如:(polar (1 1 3.5) 0.785398 1.414214)十、与文件有关的函数本节介绍的绝大多数函数具有和磁盘文件交换信息的功能,也有一些具有可以向显示器等外设输出信息的功能。1. AutoLISP应用程序加载函数(load 文件名 出错处理)该函数装入一个由AutoLISP表达式构成的文件,并执行之。“文件名”是代表文件名称且扩展名为.lsp的字符串(.lsp允许省略)。文件名中可以包含路径,以方便该函数查找需装入的文件。若装入成功,load返回文件中最后一个表达式的值。若装入失败,通常AutoLISP产生一个出错的信息。但若用户指定了“出错处理”变元,load则返回该变元值而不返回出错信息。例如:假设磁盘中有“test1.lsp”文件,没有“test2.lsp”文件,test1.lsp文件的最后一个表达式定义了一个名为“func”的函数。则有:(load “test1” “bad”) 返回FUNC(load “test2” “bad”) 返回bad2. arx程序加载函数(arxload 应用程序名 出错处理) 该函数将“应用程序名”所列ARX应用程序装入系统。若装入成功,则返回应用程序名,否则给出错误信息。3. Arx程序卸载函数(arxunload 应用程序名 出错处理 )该函数将“应用程序名”所列ARX应用程序卸载。4. AutoLISP程序卸载函数(unload 应用程序名 出错处理 )该函数将“应用程序名”所列AutoLISP应用程序卸载。5. 打开文件函数(open 文件名 读/写标志 ) 该函数打开一个文件,以便AutoLISP的I/O函数进行存取。函数返回文件描述符。“文件名”为一个字符串(含扩展名)。“读/写标志”必须用小写的单个字母来表示:“r”表示读,“w”表示写,而“a”表示向旧文件中读写的内容(该文件中应没有以CTRL/Z表示的文件结束标记)。在“w”和“a”状态下,若磁盘上无此文件,则产生并打开一个新文件。假设下列中的文件都不存在,则有:(setq f (open “new.txt” “w”)(setq f (open “nofile.lsp” “r”)在文件名中含有路径时,要以“/”代替“”。6. 关闭文件函数(close 文件描述符 )该函数关闭指定的文件,返回NIL。例如要关闭上例中打开的文件new.txt,只需:(close f)7. 读取函数(read 字符串 )该函数返回从“字符串”中取得的第一个表或原子。例如:(read “hello”)(read “(a b c) (d e)”)(read “56 32.9”)8. 读字符函数(read-char 文件描述符)该函数从键盘输入缓冲区或“文件描述符”表示的打开文件中读入一个字符,并返回该字符的ASCII码值。例如,假设键盘输入缓冲区为空:(read-char)将等待用户输入。若用户键入“ABC”并回车,则返回65(“A”的ASCII码)。对read-char的以后三次调用将分别返回66、67、10(换行符)。又如,若文件myfile.txt的内容为“Always look at the bright side of the life”,则有:(setq file (open “c:/myfile.txt” “r”)(read-char file) 返回659. 读行函数(read-line 文件描述符)该函数类似于read-char,只是每次以字符串的形式读入一行,并返回该行(仍以字符串返回,而非ASCII码)。在打开的文件中读时,每读入一行,文件指针就指向下一行,则下一次调用read-line时,就可读入下一行。例如对于上例:(read-line)将返回一行字符串。10. 写字符函数(write-char 整数 文件描述符)该函数将一个字符写到屏幕上或写到由“文件描述符”表示的打开的文件中。其中“整数”是要写字符的ASCII码,也是函数的返回值。例如:(write-char 67) 把大写字母C写在屏幕上。又如:(setq f1 (open “new.txt” “w”)(write-char 67 f1)将把大写字母C写到文件new.txt中。11. 写行函数(write-line 文件描述符)该函数将“字符串”写到屏幕上或写到由“文件描述符”表示的打开的文件中。它返回一个字符串,写入文件时不带引号。例如,下式可将字符串“Test”写入文件中:(write-line “Test” f)12. prin1函数(prin1 表达式 文件描述符该函数可以将“表达式”打印在屏幕上或文件中,并返回该表达式。“表达式”可以是任何形式的表达式,不一定必须是字符串。若“表达式”是一个含有控制字符的字符串,则该函数按下列方式编辑这些字符:e 代表ESCn 代表换行r 代表回车t 代表Tabnnn 代表八进制为nnn的字符例如:(prin1 “Hello”) 打印“Hello”并返回“Hello”(prin1 “Hello” f) 将“Hello”写入文件并返回“Hello”(prin1 (chr 2) 打印“002”并返回“002”(prin1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论