spiderman 发表于 2014-11-22 03:34:09

求一个表函数

本帖最后由 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:16:40

本帖最后由 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 '<)

819534890 发表于 2014-11-22 08:21:34

(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)
_$


xyp1964 发表于 2014-11-22 08:56:41

(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:47:55

本帖最后由 冰与火之歌 于 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:22:26

本帖最后由 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 21:43:59

本帖最后由 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)
)

434939575 发表于 2014-11-22 23:07:44

这个有点看不懂,学习了!

自贡黄明儒 发表于 2014-11-23 19:55:43

本帖最后由 自贡黄明儒 于 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)

USER2128 发表于 2014-11-25 14:08:18

自贡黄明儒 发表于 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]
查看完整版本: 求一个表函数