明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2901|回复: 3

[原创]多功能表操作函数![替代/ 批量添加/删除] 表中元素,支持表的多重镶套!

[复制链接]
发表于 2007-5-10 21:04 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-5-10 21:13:14 编辑

  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.     (setq position 0)
  9.     (while (< position index)
  10.       (setq lst2 (cons (car lst) lst2))
  11.       (if (<= position (1- index))(setq lst (cdr lst)))
  12.       (setq position (1+ position))
  13.     )
  14.     (append (reverse lst2) var (cdr lst))
  15.    )
  16.    ((< index 0)
  17.     (append var lst)
  18.    )
  19.     )
  20.   )
  21.   (defun subst1 (lst index_lst var / index)
  22.     (if (cadr index_lst)
  23.       (progn (setq index (car index_lst))
  24.       (subst1 lst
  25.        (list index)
  26.        (list (subst1 (nth index lst) (cdr index_lst) var))
  27.       )
  28.       )
  29.       (subst0 lst (car index_lst) var)
  30.     )
  31.   )
  32.   (if (listp var) t (setq var (list var)))
  33.   (if (listp index_lst) t (setq index_lst (list index_lst)))
  34.   (subst1 lst index_lst var)
  35. )
使用方法如:
(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空间的一样呢?为什么我用不了啊???请各位指点!

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-3-1 11:16 | 显示全部楼层
如果把原来不是表的元素替换的表时,会出错。

_$ (fsxm-subst-index '(zcfasf afa dsafas (asd "2234" "325432") sdf 34 4) '(3 2) '("Es" "HH"))
(ZCFASF AFA DSAFAS (ASD "2234" "Es" "HH") SDF 34 4)

正确的返回值应该是 (ZCFASF AFA DSAFAS (ASD "2234" ("Es" "HH")) SDF 34 4)
发表于 2011-3-1 12:10 | 显示全部楼层
表得提前加一层List
(fsxm-subst-index '(zcfasf afa dsafas (asd "2234" "325432") sdf 34 4) '(3 2) '(("Es" "HH")))
否则就是"批量添加"功能了
发表于 2011-3-2 22:47 | 显示全部楼层
能否提取表的第n个到第n个元素?删除第n个到第n个元素?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 20:25 , Processed in 0.198954 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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