wrf610051 发表于 2021-7-25 07:23:34

排序后为何项数不对了

(defun sortlj ( lst / )
   (vl-sort lst
             (function (lambda (a b)
                                                  (if(= (car a) (car b))
                                                           (>= (cadr a) (cadr b));;x相同,y大者排前
                                                           (> (car a) (car b));;x不同,x大者排前
                                                        )
                                                )
                          )
    )
)

(setq lst '((1 2)(2 3)(1 2)(2 3)))
(setq lst1 (append lst lst))
(length (sortlj lst1))
;;返回:4
(length (sortlj (append lst lst)))
;;返回:4
(length (sortlj '((1 2)(2 3)(1 2)(2 3)(1 2)(2 3)(1 2)(2 3))))
;;返回: 8


;;用XD::PNTS:MaxX->MinY好象也会是这个结果。


xtjd 发表于 2021-7-25 11:51:43

(defun sortlj ( lst / )
(mapcar '(lambda(x)(nth x lst))
    (vl-sort-i lst
      (function (lambda (a b)
                  (if(= (car a) (car b))
                  (>= (cadr a) (cadr b));;x相同,y大者排前
                  (> (car a) (car b));;x不同,x大者排前
                  )
                )
      )
    )
)
)

xtjd 发表于 2021-7-25 11:45:52



wrf610051 发表于 2021-7-26 06:26:49

xtjd 发表于 2021-7-25 11:45


谢谢xtijd,明白了。

wrf610051 发表于 2021-7-26 06:58:21

;;===============
;;就是说要改写成使用vl-sort-i函数
(defun sortlj ( lst / lsti )
   (setq lsti (vl-sort-i lst
                               (function (lambda (a b)
                                                          (if(= (car a) (car b))
                                                                   (>= (cadr a) (cadr b));;x相同,y大者排前
                                                                   (> (car a) (car b));;x不同,x大者排前
                                                                )
                                                        )
                                  )
                )
        )
        (mapcar '(lambda (a) (nth a lst)) lsti)
)
;;也就是说调用用XD::PNTS:MaxX->MinY也要注意了,建议也改写一下好一点。

tryhi 发表于 2021-7-26 15:17:38

这个函数确实很坑,一不小心就掉坑里
页: [1]
查看完整版本: 排序后为何项数不对了