第3章 程序的流程控制和AutoLISP文件- CAD二次开发 .ppt

返回 相似 举报
第3章 程序的流程控制和AutoLISP文件- CAD二次开发 .ppt_第1页
第1页 / 共28页
第3章 程序的流程控制和AutoLISP文件- CAD二次开发 .ppt_第2页
第2页 / 共28页
第3章 程序的流程控制和AutoLISP文件- CAD二次开发 .ppt_第3页
第3页 / 共28页
第3章 程序的流程控制和AutoLISP文件- CAD二次开发 .ppt_第4页
第4页 / 共28页
第3章 程序的流程控制和AutoLISP文件- CAD二次开发 .ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述:
第3章程序的流程控制和AutoLISP文件,3.1程序的流程控制AutoLISP程序的流程通过流程控制函数控制。3.1.1分支结构1.cond测试表达式1结果表达式1[测试表达式2结果表达式2]该函数从第一个子表起,计算每一个子表的测试表达式,直至有一个子表的测试表达式成立为止,然后计算该子表的结果表达式,并返回这个结果表达式的值。例如,当i小于等于1时,n1;小于等于2时,n4;小于等于3时,n10;其它情况下n100。用cond函数实现变量n和i之间以上关系的源代码如下,setqnconda1setqb2print+basetqb4printb该程序段的本意是,若条件成立,b等于2,然后打印a与b之和,否则b等于4,然后打印b。但是在执行该程序段时,首先检查if函数变元的数量,第1个变元是测试条件表达式,它对应表达式a1,第2个变元是条件成立时执行的表达式,它对应表达式setqb2,第3个变元是条件不成立时执行的表达式,它对应表达式print+ba,那么后面的两个表达式就是多余的变元,因此显示“toomanyarguments(变元太多)”的出错信息。,若将该程序段改写为以下代码ifa1setqb2print+basetqb4printb用括号将条件成立或不成立的多个表达式括起,虽然变元的数量改为3个,但会出现“errorbadfunction2”的出错信息。原因是在计算条件成立的表达式时,首先计算内层表setqb2,将其返回值“2”作为外层表的函数名,显然这是一个坏的函数名。利用progn函数可以很好地解决了本程序段存在的问题。,3.prong表达式...该函数将n个表达式组合起来,作为if函数的一个表达式。在执行时,按顺序计算n个表达式,返回最后一个表达式的计算结果。例如ifa1prognsetqb2print+baprognsetqb4printb该程序段的执行过程是,若条件成立,b等于2,然后打印a与b之和,返回a与b之和;若条件不成立,b等于4,然后打印4,返回4。,3.1.2循环结构1.repeat整数n表达式重复执行n次,对所有的表达式求值,返回最后一个表达式的计算结果。例如setqa1b100repeat10setqa1a其它表达式setqb10b执行结果a等于11,b等于200,返回值为200。,2.while测试式表达式若测试结果不为nil,执行各表达式,直至测试结果为nil。例如setqi1a10whilei10setqaa10其它表达式setqi1i执行结果i等于11,a等于110,返回值为11。,例如,定义求解百钱买百鸡的函数。题目是若母鸡每只3个钱,公鸡每只2个钱,小鸡每只0.5个钱。用100个钱买100只鸡,有几个答案,每个答案各有几只母鸡、公鸡和小鸡(不包括0只),打印所求的结果。该例没有合适的计算公式,只能利用枚举,试出合适的结果。首先分析母鸡数量的范围,如果母鸡等于20,剩余40个钱。用剩下的钱至少买1只公鸡之后,可以买76只小鸡,但鸡的总数为97(小于100),所以母鸡的数量应小于20。同样,买了至少1只母鸡和32只公鸡之后,剩余的33个钱最多买66小鸡,鸡的总数为99(小于100),所以公鸡的数量应小于32。小鸡的数量只能是100减去母鸡与公鸡之和。当公鸡的数量和钱数都等于100时,打印这组解。,,,,【例3-1】解百钱买百鸡程序defunchicken/hencockchickcostsetqhen1whilehen20;母鸡的数量不超过20setqcock1whilecock32;公鸡的可能数量不超过32setqchick-100hencock;小鸡的数量setqcost*3hen*2cock*0.5chick;3种鸡的钱数ifcost100printlist“母鸡“hen“公鸡“cock“小鸡“chicksetqcock1cock;公鸡的数量加1setqhen1hen;母鸡的数量加1princ;静默退出,说明①程序的第3行setqhen1不可缺少,否则第4行whilex01x02x01x02x00显然后者便于程序的阅读和调试。VisualLISP提供了文本格式编排器,可以将随意书写的程序更新为缩进格式的程序。,3.3.2程序中的注释注释可增加程序的可读性,不仅便于对程序的阅读和调试,也便于对程序的维护、移植和扩充。注释的形式可以是整行、整段或行间注释。整行或后半行注释以分号“;”开头,至行尾为注释部分。例如setqarea*pirr;计算圆的面积整段或行间注释以“;|”开头,以“|;”结尾,之间可以短到几个字符,长到若干行。例如,行间注释setqtmode;|此处添加注释|;getvar“tilemode“下面是整段的注释setvar“orthomode“1;|注释起始部分连续注释,......注释到此为止|;princ“\nORTHOMODEsetOn.“,【例3-2】定义打印ASCII码为3390的字符的命令。;该程序打印ASCII码为3390的字符;在Command提示下,键入prasdefuncpras/as;定义pras为AutoCAD命令,as为局部变元setqas33;设置as为第一个ASCII码33whileas90;while循环开始princchras;打印ASCII码的为as的字符terpri;换新行setqas1as;设置as为as的下一个ASCII码;while循环结束;命令定义结束,3.2.3在AutoCAD环境下加载AutoLISP文件(1)命令行方式加载AutoLISP文件用load函数,调用load函数的格式如下Commandload“驱动器\\路径\\文件名“[“出错信息“]若加载成功,返回被加载lisp文件的最后一个表达式的结果,若最后一个表达式是函数的定义,则返回该函数名。若加载失败,返回用户定义的出错信息,若用户没有定义出错信息,则返回加载失败的信息。,例如,文件fi1e1.lsp最后一个表达式是定义函数func1,它的路径是d\user1。加载该文件的表达式如下Commandload“d\\user1\\fi1e1““没有找到这个文件“若加载成功,返回函数名func1,否则返回“没有找到这个文件“这个信息。如果调用该函数时省略了“出错信息”,例如Commandload“d/user1/fi1e1“若加载成功,返回函数名func1,否则返回;errorLOADfailed“d\\user1\\fi1e1“.,(2)对话框方式选择下拉菜单ToolsLoadApplication项,或者选择下拉菜单ToolsAutoLISPLoad项,或者在“Command”提示下键入appload,通过随后弹出的“Load/UnloadApplications”对话框加载AutoLISP文件。,3.自动加载AutoCAD在启动时,可以自动加载acad.lsp、acad2006.lsp、acaddoc.lsp和acad2006doc.lsp四个lisp文件。用户可以创建和维护这些文件,其中acad.lsp和acaddoc.lsp只能由用户来创建。AutoCAD在加载过程中不报告是否找到或是否加载相关文件的信息。AutoCAD在加载菜单时,自动加载了与菜单文件同名的扩展名为.mnl的lisp文件。,4.间接自动加载如果把调用autoload函数的表达式写在自动加载的acad2006doc.lsp等文件内,在AutoCAD启动时,随着acad2006doc.lsp等文件的自动加载,被调用的autoload函数还可以加载一些lisp文件。调用autoload函数的格式如下Commandautoloadlisp文件名命令表该函数要求lisp文件必须在AutoCAD支持的文件搜索路径下,命令表列出了在该lisp文件中定义的部份的AutoCAD命令名。无论是否加载成功,该函数均返回nil。,autoload函数与load函数的不同之处是,执行完调用该函数的表达式之后,AutoCAD只是记录了被加载的lisp文件名和相应的命令表,而lisp文件本身并没有被加载。只有等到命令表内的任意一个命令被调用之后,这个lisp文件才真正被加载,这时该lisp文件所定义的全部AutoCAD命令才处于可以被调用状态。也就是说,如果某个lisp文件所定义的命令没有被调用,那么这个lisp文件就暂时不被加载到内存,从而节省了内存空间。例如,文件file1.lsp定义了“1”、“2”等多个AutoCAD命令,该文件存放在AutoCAD的support目录下。用autoload加载file1.lsp的表达式如下,Commandautoload“file1.lsp“‘(“1““2“)此后如果调用file1.lsp文件定义的命令表之外的命令,会显示“Unknowncommand(未知命令)““.”的出错信息,因为该lisp文件尚未被真正地加载。如果调用命令表内的任意一个命令,例如调用1命令,file1.lsp文件才被AutoCAD真正地加载,随后该文件定义的所有AutoCAD命令均可被调用。如果将表达式autoload“file1.lsp“‘(“1““2“),追加到acad2006doc.lsp等文件的后面,即可在启动AutoCAD时,间接自动地加载了file1.lsp。,
展开阅读全文

资源标签

最新标签

长按识别或保存二维码,关注学链未来公众号

copyright@ 2019-2020“矿业文库”网

矿业文库合伙人QQ群 30735420