欢迎来到天天文库
浏览记录
ID:56448381
大小:2.64 MB
页数:26页
时间:2020-06-18
《Visual LISP 程序设计(PPT)第3章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章程序的流程控制和AutoLISP文件3.1程序的流程控制AutoLISP程序的流程通过流程控制函数控制。3.1.1分支结构1.(cond(测试表达式1结果表达式1)[(测试表达式2结果表达式2)]…)该函数从第一个子表起,计算每一个子表的测试表达式,直至有一个子表的测试表达式成立为止,然后计算该子表的结果表达式,并返回这个结果表达式的值。例如,当i小于等于1时,n=1;小于等于2时,n=4;小于等于3时,n=10;其它情况下n=100。用cond函数实现变量n和i之间以上关系的源代码如下:(setqn(cond((<=i1)1)((<=i
2、2)4)((<=i3)10)(t100)))说明:该函数类似于C语言的switch语句,最后一个测试表达式“t(或T)”相当于C语言的“default”,指其余的情况,例如i等于5时,n等于100,也可以缺少这个测试表达式。与C语言switch语句不同的是,若某一测试表达式成立,即返回相应结果表达式的值,不再向下测试。例如,上述表达式中,若i等于0,已满足第一个测试表达式(<=i1),返回结果表达式的1,最后结果是n等于1,运算结束。2.(if测试条件表达式表达式1[表达式2])若测试条件表达式结果为真,执行表达式1,否则,执行表达式2。例如:
3、(if(>a1)(setqb2))该表达式的含义是;如果a大于1,则b等于2,否则不作任何计算,求值结束。(if(>a1)(setqb2)(setqb3))该表达式的含义是;如果a大于1,则b等于2,否则b等于3,求值结束。注意:该函数最多只有3个变元,即测试条件表达式、表达式1和表达式2。先分析下列程序代码:测试条件表达式表达式1成立表达式2测试条件表达式表达式1成立不成立(if(>a1)(setqb2)(print(+ba))(setqb4)(printb))该程序段的本意是,若条件成立,b等于2,然后打印a与b之和,否则b等于4,然后打印
4、b。但是在执行该程序段时,首先检查if函数变元的数量,第1个变元是测试条件表达式,它对应表达式(>a1),第2个变元是条件成立时执行的表达式,它对应表达式(setqb2),第3个变元是条件不成立时执行的表达式,它对应表达式(print(+ba)),那么后面的两个表达式就是多余的变元,因此显示“toomanyarguments(变元太多)”的出错信息。若将该程序段改写为以下代码:(if(>a1)((setqb2)(print(+ba)))((setqb4)(printb)))用括号将条件成立或不成立的多个表达式括起,虽然变元的数量改为3个,但会出
5、现“error:badfunction:2”的出错信息。原因是在计算条件成立的表达式时,首先计算内层表(setqb2),将其返回值“2”作为外层表的函数名,显然这是一个坏的函数名。利用progn函数可以很好地解决了本程序段存在的问题。3.(prong表达式...)该函数将n个表达式组合起来,作为if函数的一个表达式。在执行时,按顺序计算n个表达式,返回最后一个表达式的计算结果。例如:(if(>a1)(progn(setqb2)(print(+ba)))(progn(setqb4)(printb)))该程序段的执行过程是,若条件成立,b等于2,然
6、后打印a与b之和,返回a与b之和;若条件不成立,b等于4,然后打印4,返回4。3.1.2循环结构1.(repeat整数n表达式…)重复执行n次,对所有的表达式求值,返回最后一个表达式的计算结果。例如:(setqa1b100)(repeat10(setqa(1+a))其它表达式…(setqb(+10b)))执行结果:a等于11,b等于200,返回值为200。2.(while测试式表达式…)若测试结果不为nil,执行各表达式,直至测试结果为nil。例如:(setqi1a10)(while(<=i10)(setqa(+a10))其它表达式…(setq
7、i(1+i))执行结果:i等于11,a等于110,返回值为11。例如,定义求解百钱买百鸡的函数。题目是若母鸡每只3个钱,公鸡每只2个钱,小鸡每只0.5个钱。用100个钱买100只鸡,有几个答案,每个答案各有几只母鸡、公鸡和小鸡(不包括0只),打印所求的结果。该例没有合适的计算公式,只能利用枚举,试出合适的结果。首先分析母鸡数量的范围,如果母鸡等于20,剩余40个钱。用剩下的钱至少买1只公鸡之后,可以买76只小鸡,但鸡的总数为97(小于100),所以母鸡的数量应小于20。同样,买了至少1只母鸡和32只公鸡之后,剩余的33个钱最多买66小鸡,鸡的总
8、数为99(小于100),所以公鸡的数量应小于32。小鸡的数量只能是100减去母鸡与公鸡之和。当公鸡的数量和钱数都等于100时,打印这组解。【例3-1】
此文档下载收益归作者所有