排序后为何项数不对了
(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好象也会是这个结果。
(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
谢谢xtijd,明白了。 ;;===============
;;就是说要改写成使用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也要注意了,建议也改写一下好一点。 这个函数确实很坑,一不小心就掉坑里
页:
[1]