;;from wkai@xdcad.net
;;20050928
;;功能 :对表进行复合排序
;;参数lst:需要被排序的表
;;sortlst:排序命令序列表
;;返回值 :排序后的表
;;
;;示例:(XDL-SORT '(0 2 3 7 8 5 7 ) '>)
;; 从大到小排序
;; --->>(8 7 5 3 2 0)
;; (XDL-SORT '((0 1)(1 0)(9 6)(9 5)(5 9)(6 9)(7 8)(8 7)) '(0 >))
;; 第0项从大到小排序
;; --->>((9 6) (9 5) (8 7) (7 8) (6 9) (5 9) (1 0) (0 1))
;; (XDL-SORT '((0 1)(1 0)(9 6)(9 5)(5 9)(6 9)(7 8)(8 7)) '((0 >)( 1 <)))
;; 第0项从大到小第1项从小到大排序;;
;; --->>((9 5) (9 6) (8 7) (7 8) (6 9) (5 9) (1 0) (0 1))
;; (XDL-SORT '((0 1)(1 0)(9 6)(9 5)(5 9)(6 9)(7 8)(8 7)) '(( 1 <)(0 >)))
;; 第1项从小到大第0项从大到小排序
;; --->>((1 0) (0 1) (9 5) (9 6) (8 7) (7 8) (6 9) (5 9))
(defun XDL-SORT(lst sortlst / n)
(if (listp sortlst)
(if (listp (car sortlst))
(setq sortlst (reverse sortlst))
(setq sortlst (list sortlst))
)
(setq sortlst (list (list nil sortlst)))
)
(foreach n sortlst
(setq lst (vl-sort lst '(lambda (s1 s2)
(apply (cadr n) (list (if (car n) (nth (car n) s1) s1)
(if (car n) (nth (car n) s2) s2)))))
)
)
)
posted on 2008-03-12 22:22
深藏记忆 阅读(262)
评论(0) 编辑 收藏 所属分类:
Vlisp之韵