brawleyman 发表于 2022-7-6 07:54:20

有一个愚蠢的星期五时刻。。。

我试图创建一个LISP例程,当一个图形打开时,它没有设置为我列表中批准的比例,它会提醒用户,并将比例设置为默认的1/8”。这是我到目前为止拥有的部分,但无法使其正常工作。我想我需要mapcar或其他东西,但现在是星期五下午,我梦想着有一个为期3天的周末。我希望在一天结束前完成这项工作。感谢任何帮助!
 
(setq approvedscales '(0.125 0.25 0.333 0.5 0.667 1 1.33 2 1.25 2.5 3.75 5 6.25 7.5 8.75 10 11.25 12.5))

(if (/= (getvar "dimscale") approvedscales)
   (progn
   (alert "No usable scale has been detected in this drawing!\nThis drawing has been set to the default 1/8\" scale.")
   (setq thehfscale "1/8")
   );end progn
);end if

BlackBox 发表于 2022-7-6 08:04:03

考虑vl定位方法。
 

(if (vl-position (getvar 'dimscale) myDimScaleList)
T
nil
)

pBe 发表于 2022-7-6 08:17:44

另一种选择:
(if (member (getvar "dimscale") approvedscales)
   T
   nil
   )

brawleyman 发表于 2022-7-6 08:25:39

谢谢大家的建议!我最终使用了pBe的“成员”格式,效果很好!

BlackBox 发表于 2022-7-6 08:34:50

 
FWIW-vl位置为f a s t e r
 
示例代码。。。。
 


(setq dimScales '(0.125 0.25 0.333 0.5 0.667 1 1.33 2 1.25 2.5 3.75 5 6.25 7.5 8.75 10 11.25 12.5))


(defun _member ( dimScales )
(member (getvar "dimscale") dimScales)
)

(defun _vl-position ( dimScales )
(vl-position (getvar 'dimscale) dimScales)
)

(bench '( _member _vl-position ) (list dimScales) 10000)
速度测试。。。。
 


_MEMBER
Elapsed: 62
Average: 0.0062

_VL-POSITION
Elapsed: 31
Average: 0.0031

Lee Mac 发表于 2022-7-6 08:41:03

好奇,为什么:
 
(if <something>
   t
   nil
)
 
结构
 
由于任何非零值都被认为是真的,IF语句变得多余,因此测试可以简单地进行:
 
(defun _member ( dimScales )
   (member (getvar 'dimscale) dimScales)
)

BlackBox 发表于 2022-7-6 08:51:27

 
简单答案。。。用户错误。

BlackBox 发表于 2022-7-6 08:57:48

此处更新了速度测试。
页: [1]
查看完整版本: 有一个愚蠢的星期五时刻。。。