首页 > 代码库 > Visual LISP 第3章 程序的流程控制盒AutoLISP文件(1)程序的流程控制

Visual LISP 第3章 程序的流程控制盒AutoLISP文件(1)程序的流程控制

  AutoLISP程序的流程通过流程控制函数控制。

1.分支结构

  (1)(cond(测试表达式1 结果表达式1)[(测试表达式2 结果表达式2)]……)

  【例】

1 (setq n( cond((<= i 1) 1)2              ((<= i 1) 1)3              ((<= i 2) 4)4              ((<= i 3) 10)5              (t 100)6         )7 )

  说明:该函数类似C语言中的switch语句。最后一个测试表达式"t(或T)"相当于"default",指其余情况。也可缺少这个测试表达式。与C语言switch不同的是,若某一测试表达式成立,即返回相应结果表达式的值,不在向下测试。如果i等于0,n值就为1,运算结束。

  (2)(if 测试条件表达式 表达式1 [表达式2])

  若测试条件表达式结果为真,则执行表达式1,否则,执行表达式2.例如:(if(> a 1) (setq b 2))含义是:如果a大于1,则b等于2,否则不进行任何计算,求值结束。(if(> a 1) (setq b 2) (setq b 2))含义是:如果a大于1,则b等于2,否则b等于3,求值结束。

  当条件表达式成立时,要执行多个表达式的时候,需要用到progn函数。

  (3)(progn 表达式……)

(if(> a 1)    (progn (setq b 2)           (print (+ b a))           )    (progn (setq b 4)           (print b)           ))

  解释:如果条件成立,则b等于2,打印a和b的和,返回a和b的和。否则,b等于4,打印b,返回b的值。

2.循环结构

  (1)(repeat 整数n 表达式……)

  重复执行n次。对多有的表达式求值,返回最后一个表达式的计算结果。

1 (setq a 1 b 100)2 (repeat 103   (setq a(+ 1 a))4   (setq b(+ 10 b))5 )

  (2) (while 测试式 表达式……)

 (setq i 1 a 10) (while ( <=  i 10)   (setq a(+ a 10))  (setq i(1+ i)) )

不知道为什么总出错。

解决:因为<=需要连起来写

Visual LISP 第3章 程序的流程控制盒AutoLISP文件(1)程序的流程控制