Lee Mac 发表于 2022-7-5 15:32:02

 
“doubles”指的是双精度浮点格式数据,或AutoLISP reals。

pBe 发表于 2022-7-5 15:37:39

 
延迟时刻!
感谢您的澄清。

kpblc 发表于 2022-7-5 15:40:52

另一个:
(setq lst '(1 2 3 4.5 6 1.2))
(cons (setq a (apply 'max lst)) (- (length lst) (length (member a lst))))

Roy_043 发表于 2022-7-5 15:44:11

@李:
您的代码可以返回“max fuzz”值,而不是真正的最大值。为什么你认为这样更好?

Lee Mac 发表于 2022-7-5 15:45:43

 
罗伊,我不确定我是否理解你的意思-我的代码将返回被视为等于最大值的项目索引,并在代码中给出的容差范围内。我将此作为依赖函数(如成员/vl位置)来确定使用max函数计算的最大值位置的方法的替代方法,我认为由于使用双精度浮点格式存储的值的舍入,该函数不可靠。
 
当然,最简单的方法是:
(defun max-idx ( lst / idx rtn )
   (setq rtn (cons (car lst) 0)
         idx 1
   )
   (foreach itm (cdr lst)
       (if (< (car rtn) itm)
         (setq rtn (cons itm idx))
       )
       (setq idx (1+ idx))
   )
   rtn
)

Jef! 发表于 2022-7-5 15:47:42

同意。关于(max,与int列表中的单个实数相同,(max返回浮点。我甚至会从“我不喜欢依赖”变为“它不可靠”
给猫去皮的方法太多了,很难找到一只不去皮的猫。可怜的猫
(defun foo (l / p)
(cons (nth (setq p (last (vl-sort-i l '<))) l) p)
)
(defun foo ( l / i m ) ; By Lee Mac.
(setq m (apply 'max l) i -1)
(vl-some '(lambda ( x ) (setq i (1+ i)) (if (equal x m 1e- (cons x i))) l)
)

(defun PosOfMax (lst / fnd)
(cons (setq fnd (apply 'max lst)) (vl-position fnd lst))
)

(setq lst (list 0.8 0.9 (- 1.0 1e-9) 1.0))
注:在BricsCAD中,max函数没有“int to float”问题Jef!已经提到。

Roy_043 发表于 2022-7-5 15:50:55

@Roy,正如我在之前的帖子中所提到的,我避免使用诸如“PosOfMax”函数中使用的方法,因为我发现这些方法在与double一起使用时不可靠。

Lee Mac 发表于 2022-7-5 15:55:23

好的,AutoCAD中的min和max函数具有这种意外行为(正如Jef!已经提到的)。但对于只包含双精度或整数的列表,PosOfMax就可以了。或者vl位置也存在一些AutoCAD问题?

Roy_043 发表于 2022-7-5 15:57:21

只是为了好玩:
 
13

Grrr 发表于 2022-7-5 16:02:19

页: 1 [2]
查看完整版本: 成员的位置