试试这个
- (defun group (l f / round o r)
-
- (defun round (a f)
- (cond
- ((numberp a)
- (if (equal a (fix a)) a (* (atof (rtos (/ a f) 2 0)) f))
- )
- ((and a (listp a)) (mapcar '(lambda (x) (round x f)) a))
- )
- )
-
- (setq l (mapcar
- (function
- (lambda (x)
- (cons
- (car x)
- (vl-sort
- (vl-sort
- (vl-sort
- (cdr x)
- '(lambda (a b) (< (caddr a) (caddr b)))
- )
- '(lambda (a b) (< (cadr a) (cadr b)))
- )
- '(lambda (a b) (< (car a) (car b)))
- )
- )
- )
- )
- (if (/= f 0.0) (round l f) l)
- )
- )
- (foreach x (reverse l)
- (if
- (setq o (vl-some '(lambda (a) (if (vl-every 'equal (car a) (cdr x)) a)) r))
- (setq r (subst (list (car o) (cons (car x) (cadr o))) o r))
- (setq r (cons (list (cdr x) (list (car x))) r))
- )
- )
- (vl-remove-if '(lambda (a) (< (length a) 2)) (mapcar 'cadr r))
- )
- _$ (setq l '((1 (-5.68434e-014 1.13687e-013 0.0) (-5.68434e-014 ...
- _$ (group l 0) -> nil
- _$ (group l 1) -> ((1 2 4 5) (6 9 10))
- _$ (group l 0.0001) -> ((1 2 4 5) (6 9))
- _$ (setq l '((1 (1 2 0) (3 4 0) (5 6 0)) (2 (3 4 ...
- _$ (group l 0) -> ((1 2 4) (3 6))
- _$ (group l 1) -> ((1 2 4) (3 6))
|