peng197806 发表于 2005-11-20 17:38:00

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

<P>如何去除表中指定位置的元素?</P>
<P>比如:表("A2" "W3" ""A3" "A2"&nbsp;"Q2" "A2" ……(后面还有元素))仅仅想去除表中某个元素。比如第四个元素“A2",将表变成:("A2" "W3" ""A3"&nbsp;&nbsp;"Q2" "A2" ……)。</P>
<P>注意!不是去除表中跟指定位置元素相同的所有元素!!这样的话就不能用subst函数处理了。 搞了狠久都每搞出来。555大家棒帮忙吧,谢谢拉</P>
<P>最好能作个子程序(del_list n lis),返回处理后的表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n--第几个元素 lis--表</P>

peng197806 发表于 2005-11-20 18:22:00

找到无痕大侠的程序,好简练啊: 作者:无痕 2004-8-25 0:02:13)

(setq lst (list 2 2 3 5 6 9 9 5 4 2))
(defun remnlst (n lst / i)
(apply 'append (mapcar '(lambda(x)(if (= n (setq i(if i (1+ i) 0))) nil (list x))) lst))
)
(remnlst 6 lst)
_$
(2 2 3 5 6 9 5 4 2)
谢谢拉

llc1968 发表于 2008-8-23 09:51:00

厉害

狂刀无痕 发表于 2008-8-23 22:11:00

本帖最后由 作者 于 2008-8-23 22:18:51 编辑

虽然简练,但是用 append 是不对的,用append是不好的,不要学着这样写(defun deli (its lst / i)
(if (listp lts)nil (setq lts (list its)))
(setq i -1)
(mapcar '(lambda(x)(setq i(1+ i))(if (not(member i its))(setq lst2(cons x lst2)))) lst)
(reverse lst2)
)
(setq lst '(1 2 99 "a" ) )
(deli 1 lst)
(deli '(0 3) lst)

飞诗(fsxm) 发表于 2008-8-23 23:46:00

偶来一个一点也不简练的程序 嘿嘿!
http://fsxm.bokee.com/viewdiary.15810075.html
;;以索引 [替代/添加/删除] 表中元素.(支持多重嵌套表)
(defun fsxm-subst-index (lst index_lst var / subst0 subst1)
(defun subst0 (lst index var / lst2 position)
    (cond ((or (= index T) (> index (1- (length lst))))
    (append lst var)
   )
   ((>= index 0)
    (repeat (setq position (fix index))
      (setq lst2 (cons (car lst) lst2))
      (setq lst (cdr lst))
    )
    (if (> index position)
      (setq lst2 (cons (car lst) lst2))
    )
    (append (reverse lst2) var (cdr lst))
   )
   ((< index 0)
    (append var lst)
   )
    )
)
(defun subst1 (lst index_lst var / index)
    (if (cadr index_lst)
      (progn (setq index (car index_lst))
      (subst1 lst
       (list index)
       (list (subst1 (nth index lst) (cdr index_lst) var))
      )
      )
      (subst0 lst (car index_lst) var)
    )
)
(or (listp var) (setq var (list var)))
(or (listp index_lst) (setq index_lst (list index_lst)))
(subst1 lst index_lst var)
)
页: [1]
查看完整版本: 如何去除表中指定位置的元素?