血腥女伯爵秘史分享:LISP循环语句

来源:百度文库 编辑:九乡新闻网 时间:2024/07/13 21:23:16
电脑科技 -软件 -LISP循环语句
LISP循环语句
软件  加入时间:2007-1-31 13:25:00  admin  点击:818
循环语句:
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)
)