CarlB 发表于 2022-7-6 15:55:08

语法错误是在“if”之后有3个选项,我想你的意思是只有一个,所以用“progn”将3个“commands”括起来

Lee Mac 发表于 2022-7-6 15:59:28

卡尔是对的——当你取出清除命令时,IF语句中的项数是正确的,但最后一项不会被计算,因为它是“else do this”项——如果你明白我的意思的话。
 
有关Progn的更多信息,请参阅此处:
 
http://www.cadtutor.net/forum/showpost.php?p=173196&postcount=10

CADan 发表于 2022-7-6 16:04:42

我明白了,您必须将所有“if”操作与(progn)分组。
 
这是最终的工作版本。
 

(defun c:bfix ( / bd)
(if (setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
   (progn
      (command "._erase" bd "")
      (command "._purge" "b" "" "n")
      (command "._xref" "a" "X:\\path\\AIA_D1-L000.dwg" "0,0,0" "" "" "")
   )
)
(princ)
)

 
谢谢大家的帮助。试图从书本和互联网上学习这一点几乎是不可能的。
 
我将努力永远使用我新发现的力量。

Lee Mac 发表于 2022-7-6 16:07:36

不错,丹,
 
请记住,progn将代码包装为一条语句,以便对其进行计算,因此如果您只有三条语句,即测试表达式、结果表达式和“else”表达式,则不需要progn。

Lee Mac 发表于 2022-7-6 16:12:35

啊,还有一件事我忘了提:
 
您也可以包装“else”表达式:
 

(if   (this is true)
(progn
   (do this)
   (and this)
   (and this)
)
(progn
   (else do this)
   (and this)
   (and this)
   )
)
页: 1 [2]
查看完整版本: 恩德尔问题