asdfxx 发表于 2009-7-27 16:02:00

caoyin 发表于 2009-7-27 17:24:00

(defun&nbsp;test (lst / a lst2)<br/>&nbsp; (while (setq a (car lst) lst2 (cons a lst2) lst (vl-remove a lst)))<br/>&nbsp; (reverse lst2)<br/>)

asdfxx 发表于 2009-7-27 17:29:00

qjchen 发表于 2009-7-27 17:48:00

本帖最后由 作者 于 2009-7-27 20:00:59 编辑

:)
以下两段是我写的代码,写的不怎么样,你试试看行不,只能1维消重,多维的大概得递归吧

(defun test(lst / lst1 i res)
(setq lst1 (cons (list (car lst)) lst) i -1)
(foreach x lst
(setq i (1+ i))
(if (/= x (nth i lst1)) (setq res (append res (list x))))
) )
res
)


(defun test1(lst / lst1 i res)
(setq lst1 (cdr lst) i -1)
(foreach y lst1
(setq i (1+ i))
(if (/= y (nth i lst)) (setq res (append res (list y))))
)
(cons (car lst) res)
)
在咨询了Evgeniy大师之后,他的回答是
1. (ACET-LIST-REMOVE-ADJACENT-DUPS lst )

2. 多维递归的(要看楼主是否需要递归了)

(defun rem-adj2 (l)
(if (cdr l)
    (if (eq (car l) (cadr l))
      (rem-adj2 (cdr l))
      (cons (car l) (rem-adj2 (cdr l)))
    )         
    l
)         
)

不死猫 发表于 2009-7-27 18:00:00

<p>我回复了</p><p>(defun tt(o / i n j)(while (&lt; (1+ (setq i (if (not i) -1 (1+ i)))) (length o))(while (= j (setq j (nth (setq i (1+ i)) o))))(setq n (append n (list j))))(cons (car o) n))</p><p></p><p>命令: (tt '(a b c c c d c o))<br/>(A B C D O)</p>

elitefish 发表于 2009-7-27 19:17:00

qjchen发表于2009-7-27 17:48:00static/image/common/back.gif:)一写的很烂的代码,你试试看行不,只能1维消重,多维的大概得递归吧(defun test(lst / lst1 i res)&nbsp;(setq lst1 (cons (list (car lst)) lst) i -1)&nbsp;(foreach x lst&nbsp; (setq i

<p></p>

elitefish 发表于 2009-7-27 19:20:00

;清除列表中连续重复元素
;'( 1 2 3 1 1 nil nil nil 4 4 5 6 nil nil) -> '( 1 2 3 1 nil 4 5 6 nil)
(defun EF-List-Fix (lst1 / e lst2 )
(setq lst2 (list (setq e (car lst1))))
(while (setq lst1 (cdr lst1))
    (if (not (equal e (car lst1)))
      (setq lst2 (cons (car lst1) lst2))
      )
    (setq e (car lst1))
    )
(reverse lst2)
)我现在用的

qjchen 发表于 2009-7-27 19:54:00

:)
问了Evgeniy,现在修正原来的代码了:)

(defun rem-adj2 (l)
(if (cdr l)
    (if (eq (car l) (cadr l))
      (rem-adj2 (cdr l))
      (cons (car l) (rem-adj2 (cdr l)))
    )         
    l
)         
)

yoyoho 发表于 2009-7-28 08:22:00

<p>测试结果如下:</p><p>(rem-adj2 '(nil nil 1 2 3 3 3 3 32 1 1 1 nil nil))<br/>(nil 1 2 3 32 1 nil)</p>

yoyoho 发表于 2009-7-28 08:29:00

<p>(defun test (lst / a lst2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp; (while (setq a (car lst) lst2 (cons a lst2) lst (vl-remove a lst)))<br/>&nbsp; (reverse lst2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>)&nbsp;&nbsp;</p><p>测试结果如下:&nbsp;</p><p>(test '(a b c c c d c o))</p><p>(a b c d o)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
页: [1] 2
查看完整版本: 怎么删掉表中连续相同的元素,谢谢