循环语句:
197. repeat
一. 功能
对每一个表达式进行指定次数的求值计算,并返回最后一个表达式的值。
二. 格式
(repeat int expr...)
三. 说明
int变元必须是一个正数。
四. 实例
例1.(setq a 10 b 100) ;;; (repeat 4 ;;; (setq a (+ a 10) ;;; (setq b (+ b 100) ;;; ) ;;;置a为50,置b为500,返回值为500
例2.下面的程序可以改变选择集中的所有文本的尺寸大小,而不影响其它图元。
(defun C:chtext (/ a ts n index b1 b c d d2) (setq a (ssget) (set ts(getdist "\nEnter new text size:")) (setq n (sslength a)) (setq index 0) (repeat n (setq b1 (entget (ssname a index))) (setq index (+ index 1)) (setq b (assoc 0 b1)) (if (="TEXT" (cdr b)) (progn (setq c (assoc 40 b1)) (setq d (cons (car c) ts)) (setq b2 (subst d c b1)) (entmod b2) ) ) ) )
244. while
一. 功能
对一个测试表达式进行求值,如果它是非nil,则计算其它表达式,重复这个计算过程,直到测试表达式的求值结果为nil。
二. 格式
(while testexpr expr...)
三. 说明
while函数重复对表达式的求值处理,直对testexpr的求值结果为nil,它返回最后所计算的那个表达式的值。
四. 实例
例1.下面的代码调用用户定义的函数SOME-FUNC十次,这由变量test的值1~10进行控制。这段代码最后的返回值是11,因为这是这段代码最后所执行的那个表达式的求值结果。
(setq test 1) (while (<= test 10) (some-func test) (setq test (1+ test) )
例2.下面的程序根据用户提供的文本高度、文本行数以及行间距往图形中写文本。
(defun Tex (/ pnt1 a b c d e f) (graphscr) (setq pnt1 (getpoint "\nStarting point:")) (setq a (getdist pnt1 "\nEnter Height:")) (setq b (getreal "\nNumber of text lines:")) (setq c (getdist pnt1 "\nLine Spacing:")) (setq d "T") (while d (setq e (getstring 1 "\nEnter Text:")) (setq b (- b 1)) (if (= b 0)(setq d nil)) (command "Text" pnt1 a "0" e) (setq pnt1 (list (car pnt1)(- (cadr pnt1) c)))
) )
149. if
一. 功能
根据对条件的判断,对不同的表达式进行求值。
二. 格式
(if testexpr thenexpr [elesexpr])
三. 说明
如果testexpr的求值结果为非空,则对thenexpr进行求值;否则,对elsexpr进行求值。if函数返回所选择的表达式的值。如果没有elseexpr表达式且testexpr是nil,那么,if函数返回nil。
本函数的相关函数是progn函数。
四. 实例
例1. (if (= 1 3)"YES!!" "no.") ;返回 "no." (if (= 2 (+1 1)) "YES!!" "no.") ;返回 "YES!!" (if (= 2 (+ 3 4)) "YES!!") ;返回 nil
例2. 下面的程序可在屏幕上写上多行文字,且起点,文本高度和行间距可由用户随便指定。
(defun C:Tex2 (/ pnt1 a b c d e f) (graphscr) (setq pnt1 (getpoint"\nStarting point:")) (setq a (getdist pnt1"\nEnter Height:")) (setq c (getdist pnt1"\nLine Spacing:")) (setq d "T") (while d (setq e (getstring 1 "\nEnter Text:")) (if (= e "")(setq d nil)) (command"Text"pnt1 a "0"e) (setq pnt1 (list (car pnt1)(- (cadr pnt1)c))) ) )
(defun c:add (/ n x) (setq n 0 x 0 ) (while (<= n 100) (setq x (+ x n) n (1+ n) ) ) (prompt (strcat "从0到100的自然数和为: " (itoa x))) (princ) )
|