如何去除表中指定位置的元素?
<P>如何去除表中指定位置的元素?</P><P>比如:表("A2" "W3" ""A3" "A2" "Q2" "A2" ……(后面还有元素))仅仅想去除表中某个元素。比如第四个元素“A2",将表变成:("A2" "W3" ""A3" "Q2" "A2" ……)。</P>
<P>注意!不是去除表中跟指定位置元素相同的所有元素!!这样的话就不能用subst函数处理了。 搞了狠久都每搞出来。555大家棒帮忙吧,谢谢拉</P>
<P>最好能作个子程序(del_list n lis),返回处理后的表 n--第几个元素 lis--表</P> 找到无痕大侠的程序,好简练啊: 作者:无痕 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)
谢谢拉 厉害 本帖最后由 作者 于 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)
偶来一个一点也不简练的程序 嘿嘿!
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]