分享

LISP循环语句

 jianheyu 2011-03-19
电脑科技 - 软件 - 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)
)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多