删除列表中指定值中的一个值(若有多个重复值只删除第一个,区别于vl-remove的全部...
给lisp的初学者们分享个自定义函数(高手请略过) ,删除列表中指定值中的一个值(若有多个重复值只删除第一个,区别于vl-remove的全部删除),若有问题请反馈,谢谢!;函数功能:删除表中指定值中的一个(若有多个重复值只删除第一个,区别于vl-remove的全部删除)
;参数:L列表 del_item要删除的一个元素值
;返回值:删除一项指定值后的列表
;测试
(ygs_del_single
(setq L'(1 1 2 2 3 3 4 5 5 5 6 7 11 12 13 5 15 17 5 19 90 85 85 85 90 93 101))
(setq del_item 2)
)
;主程序
(defun ygs_del_single(L del_item / NL WZ)
(if(vl-position del_item L)
(progn
(setq wz(vl-position del_item L ))
(repeat wz
(setq nl(cons(car L )nl));新表
(setq L(cdr L))
)
(append(reverse nl)(cdr L))
)
(princ "\ndel_item不是所指定列表的成员")
)
)
(defun vv (l k / b)
(if (vl-some '(lambda (x) (= x k)) l)
(progn
(while (not (= (car l) k))
(setq b (cons (car l) b)
l (cdr l)
)
)
(append (reverse b) (cdr l))
)
(princ "\ndel_item不是所指定列表的成员")
)
)
嗯 改成while循环看起来简洁点也可以改为mapcar的循环
(setq Ls '(1 1 2 2 3 3 4 5 5 5 6 7 11 12 13 5 15 17 5 19 90 85 85 85 90
93 101)
)
(vv 1 ls)
(defun vv (k l)
(vl-remove nil
(mapcar '(lambda (x)
(if (= x k)
(setq x nil
k nil
)
x
)
)
l
)
)
)
这样吗
页:
[1]