明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1950|回复: 4

如何去除表中指定位置的元素?

[复制链接]
发表于 2005-11-20 17:38 | 显示全部楼层 |阅读模式

如何去除表中指定位置的元素?

比如:表("A2" "W3" ""A3" "A2" "Q2" "A2" ……(后面还有元素))仅仅想去除表中某个元素。比如第四个元素“A2",将表变成:("A2" "W3" ""A3"  "Q2" "A2" ……)。

注意!不是去除表中跟指定位置元素相同的所有元素!!这样的话就不能用subst函数处理了。 搞了狠久都每搞出来。555大家棒帮忙吧,谢谢拉

最好能作个子程序(del_list n lis),返回处理后的表        n--第几个元素 lis--表

 楼主| 发表于 2005-11-20 18:22 | 显示全部楼层
找到无痕大侠的程序,好简练啊: 作者:无痕 2004-8-25 0:02:13)
  1. (setq lst (list 2 2 3 5 6 9 9 5 4 2))
  2. (defun remnlst (n lst / i)
  3.   (apply 'append (mapcar '(lambda(x)(if (= n (setq i(if i (1+ i) 0))) nil (list x))) lst))
  4. )
  5. (remnlst 6 lst)
  6. _$
  7. (2 2 3 5 6 9 5 4 2)
谢谢拉
发表于 2008-8-23 09:51 | 显示全部楼层
厉害
发表于 2008-8-23 22:11 | 显示全部楼层
本帖最后由 作者 于 2008-8-23 22:18:51 编辑

虽然简练,但是用 append 是不对的,用append是不好的,不要学着这样写
  1. (defun deli (its lst / i)
  2. (if (listp lts)nil (setq lts (list its)))
  3. (setq i -1)
  4. (mapcar '(lambda(x)(setq i(1+ i))(if (not(member i its))(setq lst2(cons x lst2)))) lst)
  5. (reverse lst2)
  6. )
(setq lst '(1 2 99 "a" ) )
(deli 1 lst)
(deli '(0 3) lst)
发表于 2008-8-23 23:46 | 显示全部楼层
偶来一个一点也不简练的程序 嘿嘿!
http://fsxm.bokee.com/viewdiary.15810075.html
  1. ;;以索引 [替代/添加/删除] 表中元素.(支持多重嵌套表)
  2. (defun fsxm-subst-index (lst index_lst var / subst0 subst1)
  3.   (defun subst0 (lst index var / lst2 position)
  4.     (cond ((or (= index T) (> index (1- (length lst))))
  5.     (append lst var)
  6.    )
  7.    ((>= index 0)
  8.     (repeat (setq position (fix index))
  9.       (setq lst2 (cons (car lst) lst2))
  10.       (setq lst (cdr lst))
  11.     )
  12.     (if (> index position)
  13.       (setq lst2 (cons (car lst) lst2))
  14.     )
  15.     (append (reverse lst2) var (cdr lst))
  16.    )
  17.    ((< index 0)
  18.     (append var lst)
  19.    )
  20.     )
  21.   )
  22.   (defun subst1 (lst index_lst var / index)
  23.     (if (cadr index_lst)
  24.       (progn (setq index (car index_lst))
  25.       (subst1 lst
  26.        (list index)
  27.        (list (subst1 (nth index lst) (cdr index_lst) var))
  28.       )
  29.       )
  30.       (subst0 lst (car index_lst) var)
  31.     )
  32.   )
  33.   (or (listp var) (setq var (list var)))
  34.   (or (listp index_lst) (setq index_lst (list index_lst)))
  35.   (subst1 lst index_lst var)
  36. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 05:22 , Processed in 0.184753 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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