




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,第五章分支结构分支结构是计算机程序中一种主要结构,它是进行逻辑判断的主要手段。各种计算机语言都提供了实现分支结构的语句,AutoLISP语言提供了两个实现分支结构的函数if和cond。本章的重点是介绍这两个函数的功能和应用。同时也是分别介绍各种测试函数。5.1关系运算函数关系运算函数就是对数值型表达式的大小进行比较的函数。这些函数的参数即数值表达式可以是两个也可以是多个。关系运算函数的求值结果的返回值不是数值量而是逻辑量,如果成立返回值为T,否则为nil。AutoLISP语言提供了六种关系运算函数:5.1.1格式(函数名数1数2)其函数名:=等于大于=大于或等于/=不等于,.,参数:数1数2为数值表达式,其值必须为数,可以是整型数也可以是实型数,如果是字符串,则要按ASC码大小进行比较。函数的参数个数一般不限。5.1.2功用及求值结果主要用于比较各数值型表达式的值之间的关系,数值表达式可以是数字原子、变量或表,执行关系运算函数时先对各表达式求值,再对其值进行比较,比较结果成立,返回值为T,否则为nil。(+432)(sqrt4)1)返回值为T(setqa3b4c6)(x0)(progn(setqy10)(setqz(/yx)5.4多分支条件函数COND5.4.1调用格式(cond(测试式1结果1)(测试式2结果2)(测试式n结果n)cond函数的参数为任意数目的表,而每一个表中第一个元素为测试式,表中其余元素为结果。结果部分可以是多个表达式。测试式和结果均可以是任意S表达式。,.,5.4.2功用多分支条件函数,包括多个测试条件。根据满足条件的不同,执行相应的的操作。当执行cond函数的函数时依次测试每一个条件分支,即对每个支表中第一个元素测试式求值。若测试结果为nil,即测试失败,则转向下一个条件分支。若某一个条件分支的测试式求值结果为非nil,则该分支便是满足测试条件的分支,其后面的其它分支即不在被求值,cond函数就转向执行该成功分支的结果。cond函数的控制结果见图5.1。,测试式1,测试式2,nil,nil,nil,测试式n,nil,结果1,结果2,结果n,T,T,T,图5.1,.,5.4.3求值结果cond函数总是对成功分支的结果部分各表达式进行求值并把逻辑上的最后一个表达式的求值结果作为调用cond函数的返回值。当所有分支的测试结果均为nil,或者一个分支也不存在时,cond函数返回nil。若成功的分支没有结果部分,那么测试式的求值结果即为cond的返回值。为了深入理解cond函数的应用、功能、下面举几个例子:例1用cond函数打印学生某门课的成绩。(defunM1()(initget7)(setqm(getreal“n分数:”)(cond(m60.0)(print“不及格”)(=x0)(=x2)(=x5)(=x0)(=x2)(=x5)(x7)(exptx3)T(expx)即是错误的。2.最后一个表的测试式为T,它好象是一个收容器,凡是不能满足上面任一测试式的情况,多收容在这个分支来执行,表示“其它”的意思。3.每个分支表中的结果可以由多个表达式组成,若该分支条件成立其结果中各表达式依次被求值。4.和if函数一样,测试式、结果可以是任意表达式。5.5其它测试函数除前面介绍的测试函数外AutoLISP还提供了以下10个测试函数:判断数的性质的函数ZEROP,MINUSP,NUMBERP判断数据类型的函数TYPE,ATOM,LISTP,NULL,BOUNDP判断等值函数EQ,EQUAL由于这些测试函数,大部分可用前面函数代替,有些函数不常用,故对其功能只作简单介绍。5.5.1判断性质的函数1.ZEROP函数(1)调用格式(zerop项)(2)功用及求值结果测试项是否为零。若项为数,此函数返回T。否则返回nil。例如:,.,(setqa0.0b12.0)(zeropa)返回T(zeropb)返回nil2.MINUSP函数(1)调用格式(minusp项)(2)功用及求值结果测试项是否为负值,若项为数且其值为负,则此函数返回T,否则返回nil,例如:(minusp(-2.04.0)返回T(minusp0)返回nil3.NUMBERP函数(1)调用格式(numberp项)功用及求值结果测试项是否为数,若项的值为数,则返回T,否则返回nil。(setqe1.2f3g/(35)h/e)(numberpe)返回T(numberpf)返回T(numberpg)返回nil(numberph)返回nil(numberp(eval)h)返回T,.,5.5.2判断数据类型的函数1.YYPE函数(1)调用格式(type项)(2)功用及求值结果该函数判断项是什么数据,返回数据类型名,数据类型名在ATOMLST原子表中可找到,其表示的意义如表51所示:例如:(type/z)返回sym(type16)返回int(type/(abc)返回list(type“w”)返回str(type=)返回subr,表5-1数据类型符号的意义,.,2.ATOM函数(1)调用格式(atom项)(2)功用及求值结果该函数测试项是否为原子,若是则返回T,否则返回nil。例如:(atom/a)返回T(atom/(xyz)返回nil3.LISTP函数(1)调用格式(listp项)(2)功用及求值结果该函数测试项是否为表或用户自定义的函数,若是则返回T,否则返回nil。例如:(atom/(abc))返回T(atom/a)返回nil,.,4.NULL函数(1)调用格式(null项)(2)功用及求值结果该函数测试项的当前约束值是否为nil,若是则返回T,否则返回nil,例如:(setqa1.0bnil)(nullb)返回T(nulla)返回nil5.BOUNDP函数(1)调用格式(boundp原子)(2)功用及求值结果该函数测试项是否为有无约束值,若原子的值是一个原子,且有一个值约束它,则返回T,否则返回nil,例如:(setqa2.0bnilc(123)d“ss”)(boundp/a)返回T(boundp/b)返回nil(boundp/c)返回T(boundpc)返回nil(boundp/d)返回T,.,5.5.3等值函数前面介绍的等值比较函数(=),它只能用于原子和字符串,而不能用于表,下面提供的等值函数EQ和EQUAL,可用于各种S表达式。1.调用格式(eq表达式1表达式2)(equal表达式1表达式2)2.功用及求值结果eq和equal都是等值函数,即都是判断表达式1和表达式2是否相等,但两者有区别。equal函数只要它的两个参数表达式1和表达式2的值相等就返回T,否则返回nil,而eq函数的等值更严格,即不只是表达式1、表达式2的值要相等,而且要占用同一内存空间才返回T,否则返回nil。若两个表达式为原子,反映不出eq和equal的差异,即两个函数是等价的,但如果二表达式为表就反映出二者的差异来。例如:(setqx/a)(setqy/a)(eqxy)返回T(equalxy)返回T又如:(setqL1(list/a/b/c)返回(abcd)(setqL2(list/a/b/c)返回(abcd)(setqL3L2)返回(abcd),.,对equal函数来说,(equalL1L2)和(equalL3L2),都返回T,但对eq来说,(eqL3L2)返回T,而(eqL1L2)则返回nil。因为调用cons,list这样函数构成新表时,每调用一次都要从自由存贮表划出一些新的内存单元,用这些内存单元来装配新表,所以虽然(L1和L2)的值是相同的,都是表(abcd),但两个表都占用了不同的内存单元;另一方面用setq时,只只加一指针,即L3指向L2的值所在的内存单元,所以L3和L2不仅值相等,而且都指向相同的内存单元,所以(eqL3L2)返回T。5.6顺序控制函数PROGN5.6.1调用格式(progn标准表)5.6.2功能及求值结果该函数按顺序对每一个标准表进行求值,并返回最后一个标准表的求值结果。例如:(if(=x1)(progn(setqx(+x2)(setqy(*x4.0)(print(listxy),.,5.7综合举例例1.齿轮参数修改的另一程序。(defunclxg2()(prompt“齿轮参数:pniz”)(terpri)(initget“PNIZ”)(setqe(read(getwork“n欲修改的参数:”)(initget7)(setqel(getreal“n修改值:”)(seteel)(initget“YN”)(setqch(strcase(getwork“n是否还要修改?”);循环修改(if(=ch“Y”)(clxg2),.,例2.齿轮CAD系统的文本主菜单。(defunchd(/ch)(princ“*齿轮菜单*”)(print)(princ(strcat“n1设计计算”)(princ(strcat“n2结构选型”)(princ(strcat“n3图形绘制”)(princ(strcat“n4尺寸标注”)(princ(strcat“n5图形输出”)(print)(princ“*”)(print)(initget“12345”)(setqch(atoi(getwork“n输入选项”);函数(sjjs),(jgxx),(txhz),(ccbz),(txsc)等源程序省略。(cond(=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目2-1 绘制文本螺旋线说课稿-2023-2024学年中职信息技术(信息科技)第二册苏教版
- 买卖合同中的装运条款说课稿-2025-2026学年中职专业课-国际贸易实务-国际商务-财经商贸大类
- 2025年特色活动策划合同书
- 2025新劳动合同书(技术咨询)
- 2025磁带复制加工合同书(合同版本)
- 2025西安市产品买卖合同(合同样本)
- 塑料厂固定资产折旧管理办法
- 第1课 花卉的秘密说课稿-2025-2026学年初中艺术·美术湘美版2024七年级下册-湘美版2024
- 2025企业内部餐厅外包合同
- 2025年私人汽车租赁合同简易版
- 《大肠癌的治疗进展》课件
- GB/T 15268-2024桑蚕鲜茧
- GYK运行记录智能分析系统研究
- 计划生育服务站劳动合同
- GB/T 44757-2024钛及钛合金阳极氧化膜
- 2024-2025学年广东省深圳市宝安区富源学校九年级(上)第一次月考数学试卷(含答案)
- 红领巾爱祖国 星星火炬耀成长主题班会2
- 中国地级市经纬度-精确版
- 07SG111-1 建筑结构加固施工图设计表示方法
- DB44-T 2474-2024 自然教育标识设置指引
- 2022年高考全国Ⅰ卷语文真题及参考答案-全国Ⅰ卷
评论
0/150
提交评论