设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 198|回复: 9

[每日一码] 清理连续重复项

[复制链接]

签到天数: 1361 天

连续签到: 3 天

[LV.10]以坛为家III

已领礼包: 604个

财富等级: 财运亨通

发表于 2018-3-12 07:51:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
(w2 '(1 1 2 3 1 1 1 4 4 4 5) nil)=>(2 3 5)
  1. (defun w2 (lst a)
  2.   (if lst
  3.     (if (or (= (car lst) (cadr lst))
  4.             (= (car lst) a)
  5.         )
  6.       (progn
  7.         (setq a (car lst))
  8.         (w2 (cdr lst) a)
  9.       )
  10.       (progn
  11.         (setq a nil)
  12.         (cons (car lst) (w2 (cdr lst) a))
  13.       )
  14.     )
  15.   )
  16. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

签到天数: 396 天

连续签到: 4 天

[LV.9]以坛为家II

已领礼包: 775个

财富等级: 财运亨通

发表于 2018-3-12 08:12:07 | 显示全部楼层
感谢大师分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1111 天

连续签到: 5 天

[LV.10]以坛为家III

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-3-12 09:14:56 | 显示全部楼层
建议加个FUZZ,使用精度,更通用些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1958 天

连续签到: 56 天

[LV.Master]伴坛终老I

已领礼包: 5819个

财富等级: 富甲天下

发表于 2018-3-13 01:26:03 | 显示全部楼层
收藏了,谢谢黄大师。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1361 天

连续签到: 3 天

[LV.10]以坛为家III

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2018-3-13 07:51:12 | 显示全部楼层

这个建议很好。不过,这个代码是有人问,我写来耍的,所以就不改了。这是我的递归处女作,因为写得畸形,所以贴了出来,也许应该有更好的写法..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1100 天

连续签到: 3 天

[LV.10]以坛为家III

已领礼包: 1178个

财富等级: 财源广进

发表于 2018-3-13 14:55:53 | 显示全部楼层
本帖最后由 aimisiyou 于 2018-3-13 15:19 编辑

a设置的很巧妙!不用递归应该也可以实现。
(defun f(lst)
     (setq alst (mapcar '- (reverse (cdr (reverse lst))) (cdr lst)))   
     (setq blst (cons 1 (reverse (cons 1 (reverse alst)))))
     (setq clst (mapcar '* (reverse (cdr (reverse blst))) (cdr blst)))
     (vl-remove nil (mapcar '(lambda (x y) (if (/= x 0) y nil))  clst lst))
)

_$ (f '(1 1 2 3 1 1 1 4 4 4 5))
(2 3 5)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1958 天

连续签到: 56 天

[LV.Master]伴坛终老I

已领礼包: 5819个

财富等级: 富甲天下

发表于 2018-3-14 00:43:14 | 显示全部楼层

不错的函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 290 天

连续签到: 1 天

[LV.8]以坛为家I

已领礼包: 455个

财富等级: 日进斗金

发表于 2018-3-16 09:55:20 | 显示全部楼层
命令: (w2 '(1  nil 2 3 1 1 4 5 nil nil nil 4 5 5 nil) nil)
(1 2 3 4 5 4)
对吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 290 天

连续签到: 1 天

[LV.8]以坛为家I

已领礼包: 455个

财富等级: 日进斗金

发表于 2018-3-16 12:08:45 | 显示全部楼层
本帖最后由 aeo 于 2018-3-16 13:08 编辑
  1. 在下一贴
复制代码

命令: (w3 '(nil 1  nil 2 3 1 1 1 4 6 nil nil 7 7 6 5 5 nil) 0.001)
(nil 1 nil 2 3 4 6 6 nil)

命令: (w3 '(1  nil 2 3 1 1 1 4 6 nil nil 7 7 6 5 5 nil) 0.001)
(1 nil 2 3 4 6 6 nil)

命令: (w3 '(nil)0.001)
(nil)

命令: (w3 '(1  nil 2 3 1 1.001 1.0011 4 6 nil nil 7 7 6 5 5 nil) 0.001)
(1 nil 2 3 4 6 6 nil)



越写越长,hehe

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 290 天

连续签到: 1 天

[LV.8]以坛为家I

已领礼包: 455个

财富等级: 日进斗金

发表于 2018-3-16 12:38:34 | 显示全部楼层
本帖最后由 aeo 于 2018-3-16 12:44 编辑

这一贴为准,上一贴漏了几个字母

  1. ;去除连续重复项,考虑精度    By Aeo
  2. (defun w3(lst fuzz / j a x k len)
  3.         (setq j 0 len (length lst))
  4.         (if (< len 2)            ; 避开 '(nil)
  5.           lst
  6.           (vl-remove-if
  7.                 '(lambda(x / k)
  8.                   (cond  
  9.                     ((= j 0) (setq k(equal x (nth 1 lst)fuzz)) ) ; 避开'(nil 1 1 2...)
  10.                     ((= (1+ j) len) (setq k(equal x a fuzz) ) )          ; 避开'(...1 1 2 nil)
  11.                     (t (setq k(or(equal x (nth(1+ j) lst)fuzz)(equal x a fuzz))))
  12.                 )
  13.                 (setq a x j(1+ j))
  14.                 k
  15.                 ) lst)
  16.     )
  17. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )  

GMT+8, 2018-9-20 04:42 , Processed in 0.170681 second(s), 45 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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