明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1626|回复: 7

[函数] 如何将表中连续的相同元素只保留一个

[复制链接]
发表于 2013-11-22 12:42:24 | 显示全部楼层 |阅读模式
如题,注意是连续的相同元素,如果元素相同但是他们在表中的顺序不是连续的话不做任何处理,例如'(1 1 2 1 3 3 4 3 5)运行函数后变为'(1 2 1 3  4 3 5),并且表中元素并不局限于数字,有可能是表。各位大神发挥想象力看如何解决吧!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-11-22 13:16:29 | 显示全部楼层
  1. (defun tt (lst / aa ll)
  2.   (setq ll (list (car lst)))
  3.   (while (cdr lst)
  4.     (if (not (equal (setq aa (car lst))
  5.                     (car (setq lst (cdr lst)))
  6.              )
  7.         )
  8.       (setq ll (cons (car lst) ll))
  9.     )
  10.   )
  11.   (reverse ll)
  12. )
 楼主| 发表于 2013-11-22 13:29:49 | 显示全部楼层
ll_j 发表于 2013-11-22 13:16

牛逼啊,还有没代码更为简练些的呢?或者是运行效率更高的代码?
发表于 2013-11-24 08:53:12 | 显示全部楼层
又学到东西了...谢谢
发表于 2013-11-24 09:12:18 | 显示全部楼层
changyiran 发表于 2013-11-22 13:29
牛逼啊,还有没代码更为简练些的呢?或者是运行效率更高的代码?

  1. (defun func (lst / y)
  2.   (if (= (car Lst) 0) (setq y 1) (setq y 0))
  3.   (vl-remove-if '(lambda (x) (or (= x y) (not (setq y x)))) lst)
  4. )
 楼主| 发表于 2013-11-24 18:02:19 | 显示全部楼层
nzl1116 发表于 2013-11-24 09:12

此代码确实简洁,只不过效率劣于上个代码!
发表于 2013-11-28 16:50:12 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-28 17:46 编辑

  1. (defun tt(lst / a ll)
  2.   (while lst(setq a(car lst)lst(vl-remove a lst)ll(cons a ll)))
  3.    (reverse ll))

这个去除所有重的,下边去除连续相同的
  1. (defun tt(lst / a ll)
  2.   (while lst(setq a(car lst)lst(cdr lst)ll(if(not(equal(car ll)a))(cons a ll)ll)))
  3.    (reverse ll))

简单是简单了但表有多长得处理多少次,对于表很大,连续项也比较长的话下边这个效率会高些
  1. (defun tt(lst / a ll l2)
  2.   (setq ll lst)
  3.   (while ll(setq a(car ll)ll(vl-remove a ll)l2(cons a l2)))
  4.   (setq l2(reverse l2))
  5.   (while lst(setq a(car lst)
  6.     l2(if(member a l2)(cdr l2)l2)
  7.     lst(member (car l2)lst)
  8.     ll(if(not(equal(car ll)a))(cons a ll)ll)))
  9.    (reverse ll))

但对代码明显复杂了好多,对于表不大相同项也不多的情况下估计还不如上边一个
发表于 2013-11-28 18:02:59 来自手机 | 显示全部楼层
(Defun f(l)(if l (if (/= (car l) (cadr l))(cons (car l) (f (cdr l)) ) (f (cdr l)))))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-26 00:55 , Processed in 0.188293 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表