wimal 发表于 2022-7-5 15:00:15

成员的位置

我需要找出列表的最大值及其位置(位置号)。
(例如(列表1 2 3 4.5 6 1.2)
需要返回最大值=6
位置=4

Grrr 发表于 2022-7-5 15:04:44

(defun foo ( L / i )
(setq i -1)
(setq L (mapcar '(lambda (x) (cons x (setq i (1+ i)))) L))
(car (vl-sort L '(lambda (a b) (apply '> (mapcar 'car (list a b))))))
)
 
(foo '(1 2 3 4.5 6 1.2)) >> (6 . 4)

pBe 发表于 2022-7-5 15:07:46

另一个
(defun fam        ( l / m)
      (cons
      (Setq m(car (vl-sort l '>)))
      (vl-position m l)
      )
    )

ziele_o2k 发表于 2022-7-5 15:09:59

另一个:
(defun foo ( l / m)
(cons
   (setq m (apply 'max l))
   (vl-position m (mapcar 'float l))
)
)
但结果不同:
(foo ( LIST 1 2 3 4.5 6 1.2)) >> (6.0 . 4)

pBe 发表于 2022-7-5 15:13:43

也许这个ziele_o2k
 
(defun foo ( l / m)
(cons
   (vl-some '(lambda (n )
        (if (setq i (vl-position n l)) n))
   (list (setq m (apply 'max l)) (fix m)))
   i
)
)

Tharwat 发表于 2022-7-5 15:18:05

你好
 
为什么6排在第四位?
您知道vl位置函数返回一个基于零的整数吗?

pBe 发表于 2022-7-5 15:20:07

OP的要求也是如此
 

Tharwat 发表于 2022-7-5 15:24:25

 
我的回复被转发给OP,我知道你知道这一点。

Lee Mac 发表于 2022-7-5 15:26:58

我可能会采取这种方法:
(defun foo ( l / i m )
   (setq m (apply 'max l) i -1)
   (vl-some '(lambda ( x ) (setq i (1+ i)) (if (equal x m 1e- (cons x i))) l)
)
 
在涉及双打的情况下,我不喜欢依赖会员/vl的位置。

pBe 发表于 2022-7-5 15:31:49

 
说得好,在建立初始列表时,可能会删除或避免双重?
 
(Defun fam ( l / i m n l)
(cons
(setqi -1m (Car (vl-sort l '>)))
(while(/= m n)
          (setq n (car l) i (1+ i) l (Cdr l)) i)
)
)
页: [1] 2
查看完整版本: 成员的位置