完成和评估
你好也可以写入以下表达式:
(foreach el (list 'Length 'Circumference 'ArcLength)
(if (vlax-property-available-p vobi el) (setq per (vlax-get-property vobi el) )) )
停止对第一个真实答案列表的评估? 我不太明白这个问题,但也许:
(vl-some
'(lambda ( x ) (if (vlax-property-available-p vobi x) (vlax-get-property vobi x)))
'(length circumference arclength)
) Lee,我相信这正是Costinbos77所要寻找的——一种End Foreach语句(例如类似于VB中的End for),它将在第一次遇到满足特定条件的项时中止评估周期。
我提议这样做是为了证明两者的区别:
(progn (foreach x '(1 2 5 3 5 4 5) (if (eq x 5) (print T) (print nil))) (princ))vs。
(progn (vl-some '(lambda(x) (if (eq x 5) (print T) (print nil))) '(1 2 5 3 5 4 5)) (princ)) 谢谢你的回复。
我重新制定了要求。
vl某些函数将停止计算第一个真实响应?
因为foreach函数计算整个项目列表。
正确-请参阅上面MSasu提供的演示。 我试着表达:
(progn (vl-some '(lambda(x) (princ "\n") (princ (if (= x 5) (setq a x) "NO")) (princ ";")) '(1 2 5 3 5 4 5)) (princ))
结果是:
NO; ' Only one! Supposed to be two.'
...
and
a = nil
似乎评估在第一个错误时停止。我需要反转,首先是真的。 我相信这就是你想要得到的:
(vl-some '(lambda(x) (princ "\n") (princ (if (= x 5) (progn (setq a x) "Done")))) '(1 2 5 3 5 4 5)) 考虑这个例子:
_$ (vl-some '(lambda ( x ) (print x) (= x 5)) '(0 1 2 5 3 4 5))
0
1
2
5 T 似乎:
(vl-some '(lambda(x) (princ "\n") (princ (if (= x 5) (setq a x) vvv)) (princ ";")) '(1 2 5 3 5 4 5))
如果vvv/=nil,停止评估lambda函数。 您的代码将在第一项停止求值,因为由于最后一次求值(PRINC),LAMBDA函数将始终返回T!你测试了7号帖子上提出的更正吗?
页:
[1]
2