明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2516|回复: 11

如何让表中多于一个的元素只保留一个

  [复制链接]
发表于 2012-7-7 21:04:59 | 显示全部楼层 |阅读模式
我有若干表数据,例如'(1 2 2 3 3 3 4 5)我想让它经过处理后变成'(1 2 3 4 5),即将元素个数多于一个的只保留其中一个就行了,我苦思冥想不知算法该如何写,希望各位高手帮个忙,谢谢!!!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-7-7 21:07:55 | 显示全部楼层
you can use the sort ....
发表于 2012-7-7 21:23:18 | 显示全部楼层
(defun gxl-delsame (l)
  (if L
    (cons (car L) (gxl-delsame (vl-remove (car L) (cdr L))))
  )
)
发表于 2012-7-7 21:27:59 | 显示全部楼层
Very good recursive method.
 楼主| 发表于 2012-7-7 21:34:06 | 显示全部楼层
Gu_xl 发表于 2012-7-7 21:23
(defun gxl-delsame (l)
  (if L
    (cons (car L) (gxl-delsame (vl-remove (car L) (cdr L))))

额滴神啊,太不可思议了,佩服地五体投地!!……
 楼主| 发表于 2012-7-7 22:01:08 | 显示全部楼层
Gu_xl 发表于 2012-7-7 21:23
(defun gxl-delsame (l)
  (if L
    (cons (car L) (gxl-delsame (vl-remove (car L) (cdr L))))

版主我知道这是递归,但怎么理解不透呢,比如参数是'(1 2),我总感觉,程序只执行二次,当执行到第二次的时候,这时(car L)为'(2),gxl-delsame 的参数(vl-remove (car L) (cdr L))已经变为了nil,也就是程序不再执行,那样的话,根据最后一个表达式的值就是函数的返回值,函数应该为(cons(car L)nil)即'(2),可程序返回的是'(1 2),虽然这正是我要的结果,可总是理解不透,望版主指教。
发表于 2012-7-7 22:29:11 | 显示全部楼层
changyiran 发表于 2012-7-7 22:01
版主我知道这是递归,但怎么理解不透呢,比如参数是'(1 2),我总感觉,程序只执行二次,当执行到第二次的 ...

执行结果
(cons 1 (cons 2 nil))
发表于 2012-7-7 22:31:44 | 显示全部楼层
changyiran 发表于 2012-7-7 22:01
版主我知道这是递归,但怎么理解不透呢,比如参数是'(1 2),我总感觉,程序只执行二次,当执行到第二次的 ...

if L这句,当为nil时if不成立,就不执行了
 楼主| 发表于 2012-7-7 23:15:00 来自手机 | 显示全部楼层
Gu_xl 发表于 2012-7-7 22:29  执行结果  (cons 1 (cons 2 nil))

明白了,递归几次cons表达式就执行几次,最后一次递归的结果并不是整个函数的最终结果,它只是cons的最后一个表达式,谢谢版主提醒!
发表于 2012-7-8 02:56:21 | 显示全部楼层
本帖最后由 chlh_jd 于 2012-7-8 02:57 编辑
  1. (vl-sort '(1 2 2 3 3 3 4 5) '<) ;>> (1 2 3 4 5)
复制代码


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

本版积分规则

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

GMT+8, 2025-5-17 17:34 , Processed in 0.227697 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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