;;==========================
;;专用表排序
(defun l-sort ( L / L1 LL)
(defun foo1 (a b)
(cond ((<= (car a) (car b))
)
(T
nil)
)
)
(setq li (vl-sort-i l 'foo1))
(while Li
(setq LL (cons (nth (car Li) L) LL))
(setq Li (cdr Li))
)
(reverse LL)
)
;;===================================
;;支持容差的 vl-positon
;(xd::list:position-fuzz 4 '(1 2 3 4.021 5 6 7) 1e-1) ;;=>3
(defun xd::list:position-fuzz (e l fuzz)
(if (atom e)
(vl-position
(xd::list:car-member-if '(lambda (x) (equal e x fuzz)) l)
l
)
(vl-position e l)
)
)
;;======================
;;在lmin和lmax中找符合条件(大a)的对调项(单项对调)
(defun findterm ( l1 l2 a / n m ll yn ni mi )
(setq n (length l1))
(setq m (length l2))
(setq ll l1)
(setq yn T)
(while (and ll yn)
(if (member (+ (car ll) a) l2)
(progn
(setq ni (- n (length ll)))
(setq mi (- m (length (member (+ (car ll) a) l2))))
(setq yn nil))
)
(setq ll (cdr ll))
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) a) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) a) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) (* a 0.75)) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) (* a 0.5)) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) (* a 0.5)) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) (* a 0.5)) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) (* a 0.25)) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) (* a 0.25)) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) (* a 1.25)) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) (* a 1.25)) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) (* a 1.5)) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) (* a 1.5)) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(if yn
(progn
(setq ll l1)
(while (and ll yn)
(if (xd::list:position-fuzz (+ (car ll) (* a 1.75)) l2 (* a 0.25))
(progn
(setq ni (- n (length ll)))
(setq mi (xd::list:position-fuzz (+ (car ll) (* a 1.75)) l2 (* a 0.25)))
(setq yn nil)
)
)
(setq ll (cdr ll))
)
)
)
(defun createlst1 ( n / ll)
(repeat n (setq ll (cons (list 0 nil) ll)))
)
(defun createlst2 ( n / ll)
(repeat n (setq ll (cons (list 0 "" nil nil) ll)))
)
(defun createlst3 ( r n m / ll su a)
(setq r (* r 1.0))
(repeat n
(setq ll (cons (XD::math:rand 1 m) ll))
)
(setq su (apply '+ ll))
(setq a (/ r su))
(setq ll (mapcar '(lambda (x) (* x a)) ll))
)
(defun createlst4 ( r n m / ll )
(repeat n
(setq ll (append (createlst3 r (XD::math:rand 4 30) m) ll))
)
)