caoyin 发表于 2011-8-27 02:35:01

本帖最后由 caoyin 于 2011-8-27 02:42 编辑

;;既然不用vl函数,那就用aLisp写出vl-sort来,
;;第二个参数即排序函数无法做到像vl-sort一样对任何数量的参数都有效,但对于> <函数是可以的
;;因此以下函数处理楼主的数据,需要先对列排序,然后再进一步处理
;;因为临时写的程序,考虑得不严谨,仅供参考
;;(sort '(3 4 1 7 2 9 5) '<)
;;(sort '(3 4 2 1 7 2 9 5) '<=);;这里如果用=就会死循环,还可以改进
;;(sort '("W" "A" "x" "E" "WD" "XX" "xD" "XE") '<)

(defun SORT (LST FUN / JIN X LST2)
(defun JIN (IT LST / TAG TMP LST2)
   (while (not TAG)
   (setq TMP (append LST2 (list IT) LST))
   (if (not (setq TAG (apply FUN TMP)))
       (setq LST2 (append LST2 (list (car LST)))
             LST(cdr LST)
       )
   )
   )
   TMP
)
(while LST
   (setq X    (car LST)
         LST(cdr LST)
         LST2 (JIN X LST2)
   )
)
LST2
)

zhuangxu_521 发表于 2011-8-29 16:21:54

xiabin68 发表于 2012-10-5 22:37:19

百度的也看不懂几个,,,

野狼谷/〈M〉 发表于 2013-1-26 16:07:28

很深奥啊,没有注释,看不懂

野狼谷/〈M〉 发表于 2013-5-27 17:48:41

(setq List1 '((3 11) (2 13) (1 13) (3 10) (1 12)(4 12)))
(setq i 0)
(setq number 2)
(repeat        number
   (setq List1(mapcar '(lambda (x) (nth x List1))
             (vl-sort-i        List1
                        (function (lambda (e1 e2)
                                     (< (nth i e1) (nth i e2))
                                  )
                        )
             )
   )
)
   (setq i (1+ i))
)

cy956 发表于 2013-5-28 00:31:03

本帖最后由 cy956 于 2013-5-28 00:34 编辑

这是vl出现之前用的排序,楼主有兴趣就发上来看看。(defun lup(a / b mn mx);;;(lup a)■对一个数字表排序,重复的忽略
(setq mn (apply 'min a) mn (- mn 1000.))
(while (> (setq mx (apply 'max a)) mn)
    (setq b (cons mx b) a (subst mn mx a)))
b)

(defun #px-point2;;(#px-point2 pb)■根据点表第1,2元素的xy比较排序,同#px-point1
       (pb / IN K N P0 P1 PB1 PB11 PB2 PB21 PT)
;点表排序,返回点表【根据第一二元素的xy比较】与#px-point1同
(setq k(if(equal (car (nth 0 pb))(car (nth 1 pb)) 0.0001) 1 0 )
      n(length pb) in 0 pb1'() pb2'())
(repeat n
    (setq pt(nth in pb) in (1+ in))
    (if pt
      (setq pb1(cons (nth k pt) pb1)
   pb2(append pb2 (list (cons (nth k pt) pt)))))
)
(setq pb11(lup pb1)n(length pb11)in 0
p0(car pb11)pb21(list (dxf p0 pb2)))
(repeat n
    (setq p1(nth in pb11))
    (if (equal p1 p0 0.0000001)
      (setq in (1+ in))
      (setq in (1+ in)
   pb21(append pb21 (list (dxf p1 pb2)))
   p0 p1)
    )
)pb21
)
不过有好用的,为何还想着老的?玩lisp又到不了底层。


页: 1 [2]
查看完整版本: 论坛中有没有不用vl-sort对任意表进行多重排序的例子?