求一个表函数
本帖最后由 spiderman 于 2014-11-22 21:30 编辑请帮忙写一个表函数,要求对某个表中的元素两两相减,求绝对值,去重,得到一个新表,谢谢。
比如表'(14 16 23 7 29),通过两两相减计算得到:
|14-16|=2 |14-23|=9 |14-7|=7 |14-29|=15
|16-23|=7 |16-7|=9 |16-29|=13
|23-7|=16 |23-29|=6
|7-29|=22
去重之后,得到新表'(2 9 7 15 13 16 6 22) 本帖最后由 USER2128 于 2014-11-22 08:20 编辑
(DEFUN tt (lst / )
(setq rtn (append rtn (mapcar '(lambda(x) (abs (- (car lst) x))) (cdr lst))))
(if (cdr lst) (tt (cdr lst)))
)
(setq lst '(14 16 23 7 29))
(setq rtn nil)
(tt lst)
(vl-sort rtn '<)
(defun sub_abs(num lst) ;返回数字num减表 lst各元素后的绝对值表
(mapcar '(lambda (x) (abs (- num x))) lst)
)
(defun LstDelSame (lst / x nl) ;删除表中相同元素
(foreach x lst
(if (not (member x nl))
(setq nl (cons x nl))
)
)
(reverse nl)
)
(defun lst_sub_abs(lst / l lst_tmp end_lst);满足楼主的函数
(setq lst_tmp lst)
(foreach l lst
(setq end_lst (append end_lst (sub_abs l (setq lst_tmp (cdr lst_tmp) ))))
)
(LstDelSame end_lst)
)
_$ (lst_sub_abs '(14 16 23 7 29))
(2 9 7 15 13 16 6 22)
_$
(defun abc (lst)
(vl-sort (xyp-list-delsame
(mapcar '(lambda (x) (abs (- (car x) (cadr x))))
(xyp-List-Combination lst 2)
)
)
'<
)
) 本帖最后由 冰与火之歌 于 2014-11-22 10:50 编辑
(defun tt(p / lst)
(setq lst '())
(while p
(setq lst (append lst (mapcar '(lambda (x) (if (cdr p) (abs (- (car p) x)))) (cdr p))))
(setq p (cdr p))
)
(vl-sort (vl-remove nil lst) '<)
) 本帖最后由 wowan3344 于 2014-11-22 12:49 编辑
1(defun t11 (l / a b c d)
(mapcar
'(lambda(a)
(mapcar
'(lambda(b)
(setq c (abs(- b a)))
(or (member c d)(setq d (cons c d)))
)
(setq l (cdr l))
)
)
l
)
d
)2(defun T12 (l / x)
(mapcar
'(lambda(a)
(mapcar
'(lambda(b)
(setq x (cons (abs(- b a)) x))
)
(setq l (cdr l))
)
)
l
)
(vl-sort x '<)
) 本帖最后由 namezg 于 2014-11-22 22:05 编辑
;|
对某个表中的元素两两相减,求绝对值,去重,得到一个新表。
比如表'(14 16 23 7 29),通过两两相减计算得到:
|14-16|=2 |14-23|=9 |14-7|=7 |14-29|=15
|16-23|=7 |16-7|=9 |16-29|=13
|23-7|=16 |23-29|=6
|7-29|=22
去重之后,得到新表'(2 9 7 15 13 16 6 22)
|;
;(zg-test (setq lst '(14 16 23 7 29)))
;(2 9 7 15 13 16 6 22)
(defun zg-test (lst / newlst value)
(mapcar
'(lambda (y)
(mapcar
'(lambda (x)
(if (not (member (setq value (abs (- y x))) newlst))
(setq newlst (cons value newlst))
)
)
(setq lst (cdr lst))
)
)
lst
)
(reverse newlst)
)
这个有点看不懂,学习了! 本帖最后由 自贡黄明儒 于 2014-11-24 08:25 编辑
(defun t1 (lst)
(if (cdr lst)
(append (mapcar '(lambda (x y) (abs (- x y))) lst (cdr lst)) (t1 (cdr lst)))
)
)
(setq lst '(14 16 23 7 29))
(t1 lst)=>(2 7 16 22 7 16 22 16 22 22)
自贡黄明儒 发表于 2014-11-23 19:55 static/image/common/back.gif
(defun t1 (lst)
(if (cdr lst)
(append (mapcar '(lambda (x y) (abs (- x y))) lst (cdr lst)) ( ...
还是黄大侠的这个最为经典!
页:
[1]