本帖最后由 作者 于 2007-5-10 21:13:14 编辑
 - ;;以索引 [替代/添加/删除] 表中元素
- (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)
- (setq position 0)
- (while (< position index)
- (setq lst2 (cons (car lst) lst2))
- (if (<= position (1- index))(setq lst (cdr lst)))
- (setq position (1+ position))
- )
- (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)
- )
- )
- (if (listp var) t (setq var (list var)))
- (if (listp index_lst) t (setq index_lst (list index_lst)))
- (subst1 lst index_lst var)
- )
使用方法如:
(setq lst '(0 1 2 (30 31 32 (330 331 332)) 4 5 6 (70 71 72) 8 9))
替代
(fsxm-subst-index lst 2 "test")
->(0 1 "test" (30 31 32 (330 331 332)) 4 5 6 (70 71 72) 8 9)
删除
(fsxm-subst-index lst 2 nil)
->(0 1 (30 31 32 (330 331 332)) 4 5 6 (70 71 72) 8 9)
批量插入
(fsxm-subst-index lst '(3 3 0.5) '("test1" "test2"))
->(0 1 2 (30 31 32 (330 "test1" "test2" 331 332)) 4 5 6 (70 71 72) 8 9)
最后一个索引存在就会发生替代
最后一个索引<0则会插入到最前
最后一个索引太大or=T则会插入到最后
最后一个索引为小数就会插入到整数索引位置之间
如果用来替代的值为nil就会删除!
呵呵~所以就这样一个函数就将表,多重表(递归)
中的 替代/ 批量添加/删除 三个功能 集中到一起了!
在xd空间中的位置:
http://p4.xdcad.net/forum/showthread.php?s=&threadid=630482
明经中的语法着色功能我为什么用不了啊?
语法着色功能用法是不是与xd空间的一样呢?为什么我用不了啊???请各位指点!
|