LISP教程文档格式.docx

上传人:b****6 文档编号:19044785 上传时间:2023-01-03 格式:DOCX 页数:32 大小:47.67KB
下载 相关 举报
LISP教程文档格式.docx_第1页
第1页 / 共32页
LISP教程文档格式.docx_第2页
第2页 / 共32页
LISP教程文档格式.docx_第3页
第3页 / 共32页
LISP教程文档格式.docx_第4页
第4页 / 共32页
LISP教程文档格式.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

LISP教程文档格式.docx

《LISP教程文档格式.docx》由会员分享,可在线阅读,更多相关《LISP教程文档格式.docx(32页珍藏版)》请在冰豆网上搜索。

LISP教程文档格式.docx

(+230450.0)返回86.0

2.减法

格式(-num1num2num3...)

此函数(-)从第一个数中减去第二个数(num1-num2)。

如果多于两个数,就用第一个数字减去其后所有数字的和[num1-(num2+num3...)]。

在下面的第一个例子中,28减去14后返回14。

因为两个数均为整数,结果亦为整数。

在第三个例子中20与10.0相加,并用50减去两数的和(30.0),返回一个实数20.0。

Command:

(-2814)返回14

(-25711)返回7

Command:

(-502010.0)返回20.0

(-2030)返回河0

(-20.030.0)返回-10.0

3.乘法

格式(*num1 

num2num3…)

此函数(*)计算乘号右边所有数字的乘积(num1×

num2×

num3...)。

若均为整数,它们的乘积亦为整数;

若其中含有一个实数,乘积即为实数。

(*25)返回10

(*253)返回30

(*2532.0)返回60.0

(*2-5.5)返回-11.0

(*2.0-5.5-2)返回22.0

4.除法

格式(/num1 

num2 

num3…)

此函数(/)用第一个数除以第二个数。

如果多于两个数,就用第一个数除以其后所有数的乘积[num1/(num2×

num3×

...)]。

在下面的第四个例子中,用200除以5.0与4的乘积[200/(5.0×

4)]。

示例:

(/30)返回30

(/32)返回1

(/3.02)返回1.5

(/200.05.04)返回10.0

(/200-5)返回-40

(/-200-5.0)返回40.0

14.3 

增量、减量与绝对数字

1.增量数字

格式(1+number)

此函数(l+)使数字与1(整数)相加,返回一个增加1的数。

在下面的第二个例子中,1与-10.5相加返回-9.5。

(1+20)返回21

(1+-10.5)返回-9.5

2.减量数字

格式(1-number)

此函数(1-)从数字中减去1(整数),并返回一个减去1的数。

在下面的第二个例子中-10.5减去1返回-11.5。

(1-10)返回9

(1-10.5)返回-11.5

3.绝对数字

格式(absnum)

abs函数返回一个数的绝对值。

该数可以是整数或者实数。

在下面的第二个例子中,由于-20的绝对值为20,故函数返回20。

(abs20)返回20

(abs-20)返回20

(abs-20.5)返回20.5

14.4 

三角函数

1.sin函数

格式(sinangle)

sin函数计算一个角(以弧度表示)的正弦值。

在下面的第二个例子中,sin函数计算Pi(180度)的正弦值并返回0。

(sin0)返回0.0

(sinPi)返回0.0

(sin1.0472)返回0.866027

2.cos函数

格式(cosangle)

cos函数计算一个角(以弧度表示)的余弦值。

在下面的第三个例子中,cos函数计算Pi(180度)的余弦值并返回-1.0。

(cos0)返回l.0

(cos0.0)返回1.0

(cosPi)返回-1.0

(cos1.0)返回0.540302

3.atan函数

格式(atannum1)

atan函数计算数的反正切值,返回角度以弧度表示。

下面的第二个atan函数计算1.0的反正切值并返回0.785398(弧度)。

(atan0.5)返回0.463648

(atan1.0)返回0.785398

(atan-1.0)返回-0.785398

4.具有两个参数的atan函数

格式(atan 

num1 

num2)

还可以在atan函数中再指定一个数。

若指定了第二个数,函数将以弧度形式返回(num1/num2)的反正切值。

在下面的第一个例子中,第一个数(0.5)除以第二个数(1.0),atan函数计算商(0.5/1=0.5)的反正切值。

(atan0.51.0)返回0.463648弧度

(atan203.0)返回0.588003弧度

(atan2.0-3.0)返回2.55359弧度

(atan-2.03.00)返回-0.5880033弧度

(atan-2.0-3.0)返回-2.55359弧度

(atan1.00.0)返回1.5708弧度

(atan-0.50.0)返回-1.5708弧度

5.angtos函数

格式(angtosangle[made[precision]])

angtos函数以字符串格式返回以弧度表示的角度值。

字符串格式由made和precision的设置决定。

(angtos0.58800304)返回“33.6901"

(angtos2.5535904)返回“145.3099"

(angtos1.570804)返回“90.0000"

(angtos-1.570802)返回“270.00"

注意 

在(angtosangle[mode[precision]])中:

angle是以弧度表示的角度值。

mode是与AutoCAD系统变量AUNITS相对应的angtos模式。

AutoCAD中可用模式如下:

ANGTOS模式 

编辑格式

十进制角度

度/分/秒

梯度

弧度

测量单位

precision是一个整数,用于控制小数的位数,与AutoCAD系统变量AUPREC相对应。

其最小值为0,最大值为4。

在上面的第一个例子中,angle为0.588003弧度,mode为0(十进制角度),precision为4(小数点后有四位)。

函数返回33.6901。

14.5关系表达式

在程序中,通常都需要测试某些特定的条件。

若条件为真,程序执行某些功能,若不为真,执行另外一些功能。

例如,条件表达式(if(<

X5)),若变量x的值小于5,测试结果为真。

编程过程中经常要用到这种类型的测试条件。

本节讨论在AutoLISP编程中要用到的各种关系表达式。

1.等于

格式(=atom1atom2…)

该函数(=)检查两个元素是否相等。

若相等,条件为真,函数返回T。

同样,若指定的元素不相等,条件为假,函数返回nil。

(=55)返回T

(=5 

49)返回nil

(=5.55.55.5)返回T

(="

yes"

“yes”)返回T

(=“yes"

"

“no”)返回nil

2.不等于

格式(/=atom1atom2…)

该函数(/=)检查两个元素是否不相等。

若不相等,条件为真,函数返回T。

同样,若指定的元素相等,条件为假,函数返回nil。

(/=504)返回T

(/=50 

50)返回nil

(/=50-50)返回T

(/=“yes”“no”)返回T

3.小于

格式(<atom1atom2…)

该函数(<)检查第一个元素(atoml)是否小于第H个元素(atomZ)。

若为真,函数返回T,否则返回nil。

(<35)返回T

(<534)返回nil

(<“x”“y”)返回T

4.小于等于

格式(<=atom1atom2...)

该函数(<

=)检查第一个元素(atom1)是否小于等于第二个元素(atom2),若是,函数返回T,否则返回nil。

(<=1015)返回T

(<=“c”“b”)返回nil

(<=2.0 

0)返回T

5.大于

格式(>atom1 

atom2…)

该函数(>)检查第一个元素(atom1)是否大于第二个元素(atom2)。

若是,函数返回T,否则返回nil。

在下面第一个例子中,15大于10,因此,关系表达式为真,且函数返回T。

在第二个例子中,10大于9,但9并不大于其后的9,因此函数返回nil。

(>

1510)返回T

(>1099)返回nil

(>“c”“b”)返回T

6.大于等于

格式(>= 

atom1 

该函数(>

=)检查第一个元素(atom1)的值是否大于等于第二个元素(atom2)。

在下面第一个例子中,78大于但木等于50,因此,函数返回T。

(>=7850)返回T

(>="

x"

“y"

)返回nil

↑返回顶部 

打印本页 

关闭窗

14.6defun、setq、getpoint与Command函数

1.defun函数

defun函数用于在AutoLISP程序中定义函数,其格式为:

(defunname[argument])

其中name………………函数名

argument…………参数列表

(defunADNUM(),定义了一个函数ADNUM,此函数天参数,亦无局部变量(Localsymbols)。

这就意味着程序中用到所有变量均为全局变量。

全局变量的值在程序结束时不会丢失。

(defunADNUM(abc),定义了一个含有三个参数a、b和c的函数ADNUM。

变量a、b、c从程序外部获取它们的值。

(defun 

ADNUM(/ab),定义了一个含有两个局部变量a和b的函数ADNUM。

局部变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。

C:

ADNUM(),在函数名前加上C:

后,此函数就可以通过在AutoCAD的Command:

提示符后输入其函数名来执行。

如果没有使用C:

,函数名则必须置于圆括号中。

AutoLISP包含一些内置函数,不要使用其中的任一名称作为函数名或变量名,以下是一些AutoLISP内置函数的保留名称列表。

Abs 

ads 

alloc 

and 

angle 

angtos 

append 

apply 

atom 

ascii 

assoc 

atan

Atof 

atoi 

distance 

equal 

fix 

float 

if 

length 

list 

load 

member 

nil

Open 

or 

pi 

read 

repeat 

reverse 

set 

type 

while

2.setq函数

setq函数用于给变量赋值,其格式如下:

(setqnamevalue[Namevalue]…)

其中Name…………………变量名

value…………………赋予变量的值

赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。

若该值为字符串,其长度不可超过100个字符。

(setqx12)

(setqx6.5)

(setqx8.5y12)

在最后一个表达式中,8.5被赋予变量X,12被赋予变量Y。

(setqanswer“YES”)

这个表达式中,字符串值“YES”被赋给变量answer。

setq函数还可用于与其他表达式联合为变量赋值。

下面的例子setq函数被用来为不同的变量赋值。

(setqpt1((getPoint“EnterstartPoint:

))

(setq 

angl(getangle“EnterIncludedangle:

”))

answer(geststring“EnterYESorNO:

不要给AutoLISP使用的一些内置函数名及符号赋值。

下面的函数是有效的,但由于保留符号Pi及angle将被重新定义,因此不要使用。

(setqPi3.0)

(setqangle…)

3.getpoint函数

getpoint函数暂停程序的运行,允许用户输入一个点的X、Y坐标或X、Y、Z坐标。

该点的坐标可以由键盘或使用屏幕光标输入。

getpoint函数的格式为:

(getPoint[Point][Prompt])

其中point…………………输入一个点,或选择一个点

prompt…………………将显示在屏幕上的提示

(setqPt1(getpoint))

(setqPt1(getPoint“EnterstartingPoint》

注意 

不能输入其他的AutoLISP例程名来响应getpoint函数。

二维或三维的点应考虑定义在当前用户坐标系统(UCS)下。

4.Command函数

Command函数用于在AutoLISP程序内部执行标准的AutoCAD命令。

AutoCAD命令名及命令选项必须置于双引号内。

Command函数的格式为:

(Command“Commandname”)

其中Command…………………AutoLISP函数

Commandname……………AutoCAD命令

(Command“line”Pt1Pt2“”)

“line”……………AutoCADLINE命令

Pt1……………………第一点

Pt2……………………第二点

“”…………………用于返回

在AutoCADR12之前的版本中,不能使用Command函数执行AutoCAD的PLOT命令。

例如,(Command“plot”…)是无效表达式。

在AutoCAD2000、 

R14和R13中,才可以通过Command函数使用plot命令(Command“plot”…)。

Command函数不能使用AutoCAD的DTEXT或TEXT命令输入数据。

(可以用Command函数发出DTEXT及TEXT命令,还可以输入文本高度及旋转角度,但却不能在DTEXT或TEXT命令提示文本输入时输入文本)。

不能通过Command函数使用AutoLISP的输入函数。

这些输入函数为getpoint、getangle、getstring及getint。

例如,(Command“getPoint…)和(Command“getangle…)均为无效函数。

如果程序中包含这样的函数,在其被装入时就会显示一条错误信息。

例1 

编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出如图12.1所示的三角形。

多数程序都包含三个基本组成部分,即输入、输出及处理过程。

其中处理过程的功能为根据给定的输入来产生预期的输出(见图12-2)。

编写程序前,必须确认这三部分。

本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。

用以生成该三角形的处理过程为:

由P1到P2、由P2到P3、到P3到P1各画一条直线。

弄清这三部分就会使编程过程更清晰。

处理过程对于程序的成功起着很重要的作用。

有时它很简单,有时却包含复杂的计算。

如果程序包含大量运算,就应该把它分成若干个程序(甚至是子程序),并按逻辑的顺序和系统的顺序安排好它们。

同时请记住,程序需要随时修改,也很有可能被其他程序员修改。

因此,应尽可能使程序清晰、明了,以便其他程序员了解程序在其执行过程中的不同阶段在做些什么。

如果可能,请给出草图,并且说明要点。

输入 

输出

P1点的位置

P2点的位置 

三角形P1,P2,P3

P3点的位置

处理过程

从P1到P2画线

从P2到P3画线

从P3到P1画线

下面的文件是例1的AuotLISP程序清单。

右边的行号只为方便引用,并不是程序的一部分。

thisprogramwillpromptyoutoenterthreepoints 

1

ofatrianglefromthekeyboard,orselectthreepoints 

2

byusingthescreencursor.P1,P2,P3aretrianglecorners. 

3

4

(defun:

triang1() 

5

(setqP1(getPoint“\nEnterfirstPointoftriangle:

”)) 

6

(setqP2(getPoint“\nEntersecondPointoftriangle:

” 

7

(setqP3(getPoint“\nEnterthirdPointoftriangle:

8

(Command“line”P1P2P3“C”) 

9

) 

10

说明

第1-3行

前三行为注释行,用于描述程序中的函数。

这几行很重要因为有它们,编辑程序会变得简单一些。

可以在任何必要的时候使用注释。

所有的注释行都必须以分号(;

)开头,当程序装入时这些行会被忽略。

第4行:

行为空行,用于分隔程序与注释部分。

空行还可以用来分隔程序的不同模块。

这样便于区分程序的不同部分。

空行对程序没有影响。

第5行:

(defunC:

triang1()

本行中,defun为一个AutoLISP函数,它定义了函数TRIANG1。

TRIANG1为该函数的函数名。

由于此函数名前带有C:

,因此该函数可以像AutoCAD命令一样

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1