spring007_22 发表于 2013-6-30 13:18:11

菜鸟写的代码,求解答为什么总是只能执行一个子程序,求前辈指点解答

程序目的为了修改文字的高度和倾斜的,执行后总是只能执行第一个子程序,本人为业余自学lisp,水平很菜,如有前辈赐教,不甚感激!
(defun c:9test4()
    (prompt"\n《框选欲修改的文字》")
   (setq old_hh (getvar "textsize"))
   (setq str_hh (strcat "\n输入新文字高度<" (rtos old_hh 2) ">: "))
   (setq hh (getdist str_hh))
   (if (null hh)
    (setq hh old_hh)
    )
   (setq ang (getangle "\n输入倾斜角 <30>: "))
   (if (null ang)
   (setq ang (/ pi 6)))
   (setqss (ssget))
   (setqi 0 )
   (setqnn (sslength ss))
   (repeatnn
      (setq ssn (ssname ss i))
      (setq ssdata (entget ssn))
      (setq sstyp (cdr (assoc 0 ssdata)))
      (if(= sstyp "TEXT")
         (text_h)
         (text_a)
         )
         (setqi (1+ i))
   )
   (prin1)
)
   (defun text_h()
                (setq old_hh (assoc 40 ssdata))
                (setq new_hh (cons 40 hh))
                (setq ssdata (subst new_hh old_hh ssdata))
                              )
       (defun text_a()
            (setq old_ang (assoc 51 ssdata))
            (setq new_ang (cons 51 ang))
            (setq ssdata (subst new_ang old_ang ssdata))
                   (entmod ssdata)
                  )
                  (prompt "\n << 9TEST4>>连续修改多个文字的高度和倾斜度")
                     (prin1)

vormittag 发表于 2013-6-30 13:56:42

(if(= sstyp "TEXT")
         (text_h)
         (text_a))这段代码用错了,看看if函数的用法
(if (条件表达式) (条件为真时执行的表达式) (条件为假时的表达式))
所以在这里(text_h)是条件为真时的执行的,(text_a)是条件为假时执行的。

你是想在条件为真时按顺序执行(text_h)和(text_a)这两个表达式,所以应该用progn函数对这两个表达式求值。正确的写法如下:(if(= sstyp "TEXT")
      (progn (text_h)
                  (text_a)))

spring007_22 发表于 2013-6-30 14:01:04

vormittag 发表于 2013-6-30 13:56 static/image/common/back.gif
这段代码用错了,看看if函数的用法
(if (条件表达式) (条件为真时执行的表达式) (条件为假时的表达式))
所 ...

谢谢,懂了

pb.v@163.com 发表于 2013-10-21 22:42:23

vormittag 发表于 2013-6-30 13:56 static/image/common/back.gif
这段代码用错了,看看if函数的用法
(if (条件表达式) (条件为真时执行的表达式) (条件为假时的表达式))
所 ...

感谢了,学习了if执行子程序的的方法,你真是好人啊,这么详细的回答
页: [1]
查看完整版本: 菜鸟写的代码,求解答为什么总是只能执行一个子程序,求前辈指点解答