AutoLISP中IF函数多条件判断实现问题咨询
问题分析与解决方案
你的代码核心问题是逻辑运算符用错:预期是同时满足「不等于三个值」的与逻辑,却用了or(或逻辑),导致判断结果完全相反。另外princ里的换行符应该是"\n"而非"/n",否则无法正确换行。
修正后的IF函数实现
(if (and (/= flr "0_01.") ; 同时满足:不等于"0_01." (/= flr "4_01.") ; 不等于"4_01." (/= flr "6_01.") ; 不等于"6_01." ) (progn ; 使用已定义变量重定义外部参照路径 (command "-xref" "p" afile afilepathname) ) (progn (princ "\nThis is a model file") ; 修正换行符为"\n" ) )
使用COND函数的实现方式
如果你想用cond实现相同逻辑,写法如下:
(cond ; 当flr不等于三个目标值时,执行xref路径重定义 ((and (/= flr "0_01.") (/= flr "4_01.") (/= flr "6_01.") ) (command "-xref" "p" afile afilepathname)) ; 其他所有情况(即flr是三个值之一),输出提示 (t (princ "\nThis is a model file")) )
关键说明
and运算符:只有所有条件都为真时,整体才返回真,符合你「同时不等于三个值」的需求。cond的t分支:代表默认匹配,当前面的条件都不满足时执行,适合处理「否则」的逻辑。- 换行符修正:
"\n"是AutoLISP里的正确换行转义字符,"/n"会被当作普通字符串输出。
内容的提问来源于stack exchange,提问作者Dustin
相关产品推荐
相关产品推荐

