Cond语句问题
好的,我在试验LOGAND命令,只是作为一个学习练习。我试着构建这个LISP:
(defun c:BXLister (/ BX_Ans BX_Ent BX_List)
(initget "Blocks Xrefs")
(setq BX_Ans (getkword "\nList Blocks or XRefs? <Both> : "))
(cond
((= BX_Ans "Blocks")
(setq BX_Ent(tblnext "BLOCK" T)
BX_List "Blocks: \n"
) ;_end setq
(while BX_Ent
(if (eq 0 (logand 0 (cdr (assoc 70 BX_Ent))))
(setq BX_List (strcat BX_List (cdr (assoc 2 BX_Ent)) "\n"))
) ;_end if
(setq BX_Ent (tblnext "BLOCK"))
) ;_end while
)
((= BX_Ans "XRefs")
(setq BX_Ent(tblnext "BLOCK" T)
BX_List "XRefs: \n"
) ;_end setq
(while BX_Ent
(if (eq 4 (logand 4 (cdr (assoc 70 BX_Ent))))
(setq BX_List (strcat BX_List (cdr (assoc 2 BX_Ent)) "\n"))
) ;_end if
(setq BX_Ent (tblnext "BLOCK"))
) ;_end while
)
((/= BX_Ans "XRefs" "Blocks")
(setq BX_Ent(tblnext "BLOCK" T)
BX_List "Blocks & XRefs: \n"
) ;_end setq
(while BX_Ent
(setq BX_List (strcat BX_List (cdr (assoc 2 BX_Ent)) "\n"))
(setq BX_Ent (tblnext "BLOCK"))
) ;_end while
)
) ;_end cond
(alert BX_List)
(princ)
) ;_end defun
我打算根据用户的输入列出外部参照或块。
然而,事实上,我遇到的问题并不是logand函数-问题发生在用户输入以列出外部参照时-程序将列出块和外部参照。
我认为cond语句有错误,但我看不出是什么
提前谢谢各位。 好啊
我以不同的方式执行了相同的任务-为了每个人的利益发布:
(defun c:BXLister (/ BX_Ent BX_BList BX_XList)
(setq BX_Ent (tblnext "BLOCK" T)
BX_BList "Blocks: \n"
BX_XList "Xrefs: \n"
) ;_end setq
(while BX_Ent
(if (eq 0 (logand 0 (cdr (assoc 70 BX_Ent))))
(setq BX_BList (strcat BX_BList (cdr (assoc 2 BX_Ent)) "\n"))
) ;_end if
(if (eq 4 (logand 4 (cdr (assoc 70 BX_Ent))))
(setq BX_XList (strcat BX_XList (cdr (assoc 2 BX_Ent)) "\n"))
) ;_end if
(setq BX_Ent (tblnext "BLOCK"))
) ;_end while
(alert (strcat BX_BList "\n" BX_XList))
(princ)
) ;_end defun
李,
单步遍历非图形表的最简单方法是(while)调用:
大卫 了不起的大卫,
我在使用while进行操作之前先使用cond,这让我觉得很尴尬。
我喜欢你的Lisp程序-谢谢。 嗨,李,
关于您使用COND的第一个代码示例,我还没有对其进行足够的研究,以完全理解您在做什么,但我确实注意到了这句话
(/=BX_Ans“XRefs”“Blocks”)。我的参考文献中说,不等于函数的定义没有两个以上的参数。这可能是个问题。奇怪的是,在参考手册中,函数是写的(/=atom-atom…),提出两个以上的论点!我猜是打字错误。 我的印象是这些功能:
=,/=,=可以接受任意数量的参数。
如果键入:
(/= 4 5 6)
在命令行中,它返回T。
谢谢你的时间。 大卫,
只是出于好奇,你是在发帖时手动为每个括号指定不同的颜色,还是有一个程序可以帮你这么做? 我喜欢大卫的。
对此修改输出:
4 李,
我对不相等函数的研究很少,结果发现了我的两个参考文献中的错误或遗漏
在Autolisp中,该函数的非标准行为(对我来说)令人惊讶。您可能希望测试Autocad 2004,看看它是否
符合以下要求:
从Autocad 2008联机帮助文件中提取:
.... 如果没有两个连续参数的值相同,则返回T;否则为零。如果只提供了一个参数,/=返回T。
注意,/=的行为并不完全符合其他LISP方言。如果列表中没有两个参数具有相同的值,则标准行为是返回T。在AutoLISP中,如果没有连续参数具有相同的值,则/=返回T;请参阅下面的示例。
示例
(/=10 20)返回T
(/=“you”“you”)返回nil
(/=5.43 5.44)返回T
(/=10 20 10 20)返回零
(/=10 20)返回T
注意:在最后一个示例中,虽然列表中有两个参数具有相同的值,但它们并不跟随在一起;因此/=计算为T。 (/=)函数一直都很脆弱,文档编写得很糟糕。我不惜一切代价避免它,因为它几乎没有实际价值。
李,
我写了一个程序,可以读取。LSP文件并将其格式化为HTML很早以前。不久前,当CADTutor更改了格式并对其进行了一些调整时,我将其重新编辑为BBC的输出。我一直认为彩色编码的paraenthisis是一个很好的校对工具。也是一个很好的学习工具。
我不太喜欢结尾评论;如果结束
我在开发一个非常拉格雷罗图因时不时使用它们,但在最终版本中省略了它们-大卫
页:
[1]
2