找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9012|回复: 12

[LISP函数-表]:表中指定位置插入新元素或删除指定位置元素

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-8-31 14:48:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;; ! ****************************************************************************
  2. ;; !xd-Insitem          作者: eachy [[url]www.xdcad.net[/url]]                             
  3. ;; ! ****************************************************************************
  4. ;; ! 功  能   : 表中指定位置插入新元素或删除指定位置元素                        
  5. ;; ! 参  数   :                                                                  
  6. ;; !            'l'       -  表                                                  
  7. ;; !           'item'    -  索引值或索引值表                                    
  8. ;; !           'element' -  插入的元素或对应索引值表数量的插入元素表,nil 时为删除
  9. ;; !                    指定位置元素                                             
  10. ;; ! 返回值   : 成功返回新表,否则返回原表                                       
  11. ;; !                                                                             
  12. ;; ! 注  意   : 1 插入/删除位置为相对原表的位置,从 0 计数                       
  13. ;; !                                                                             
  14. ;; ! e-mail   : [email]eachy@21cn.com[/email]                                                   
  15. ;; !                                                                             
  16. ;; ! Web      : [url]www.xdcad.net[/url]                                                   
  17. ;; ! ****************************************************************************
  18. ;; eq .
  19. ;; _$ (ea:insitem '(1 2 3 4 5 6) 2 0)
  20. ;;(1 2 3 0 4 5 6)
  21. ;;_$ (ea:insitem '(1 2 3 4 5 6) '(1 4)  '(0))
  22. ;;(1 2 0 3 4 5 nil 6)
  23. ;;_$ (ea:insitem '(1 2 3 4 5 6) '(1 4)  '(0 0))
  24. ;;(1 2 0 3 4 5 0 6)
  25. ;;_$ (ea:insitem '(1 2 3 4 5 6) '(1 4)  nil)
  26. ;;(1 3 4 6)
  27. ;;_$ (ea:insitem '(1 2 3 4 5 6) 4  nil)
  28. ;;(1 2 3 4 6)
  29. (defun xd-Insitem (l item element / n ll i pos l1)
  30.   (setq n 0 l1 l)
  31.   (if (= (type item) 'INT)
  32.     (setq item (list item))
  33.   )
  34.   (if (and element
  35.            (/= (type element) 'LIST)
  36.       )
  37.     (setq element (list element))
  38.   )
  39.   (if element
  40.     (while l
  41.       (setq i (car l))
  42.       (if ll
  43.         (if (setq pos (vl-position n item))
  44.           (setq ll (append (list (nth pos element) i) ll))
  45.           (setq ll (cons i ll))
  46.         )
  47.         (setq ll (cons i ll))
  48.       )
  49.       (setq n (1+ n)
  50.             l (cdr l)
  51.       )
  52.     )
  53.     (while l
  54.       (setq i (car l))
  55.       (if (not (vl-position n item))
  56.         (setq ll (cons i ll))
  57.       )
  58.       (setq n (1+ n)
  59.             l (cdr l)
  60.       )
  61.     )
  62.   )
  63.   (if ll
  64.     (reverse ll)
  65.     l1
  66.   )
  67. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-1 01:24:23 | 显示全部楼层
表中指定位置插入新元素或删除指定位置元素
;; _$ (ea:insitem '(1 2 3 4 5 6) 2 0)
;;(1 2 3 0 4 5 6)
位数有误,应为(1 2 0 3 4 5 6)
或表述为,“指定位置之后插入新元素或删除指定位置元素”

  1. ;| (xl-subi lst ilst nlst)---------作  者: 狂刀 [[url]www.xdcad.net[/url]]
  2. 功  能   : 表中指定位置插入新元素或删除指定位置元素
  3. 参  数   : lst = 表 ;
  4.            ilst = 索引值或索引值表;
  5.            nlst = 插入的元素或对应索引值表数量的插入元素表,nil 时为删除;
  6. 返回值   : 成功返回新表,否则返回原表;
  7. 注  意   : 1 插入/删除位置为相对原表的位置,从 0 计数;
  8. 实 例  :
  9. (xl-subi '(1 2 3 4 5 6) '(1 4) '(0 0) ) ;;->(1 0 2 3 4 0 5 6)
  10. (xl-subi '(1 2 3 4 5 6) '(1 4) '(0 nil)) ;;->(1 0 2 3 4 6)
  11. (xl-subi '(1 2 3 4 5 6) '(1 4) '(0 )) ;;->(1 0 2 3 4 6)
  12. (xl-subi '(1 2 3 4 5 6) '(1 4) nil);;->(1 3 4 6)
  13. (xl-subi '(1 2 3 4 5 6)  2 0);;->(1 2 0 3 4 5 6)
  14. (xl-subi '(1 2 3 4 5 6) 2 nil);;->(1 2 4 5 6)
  15. |;
  16. (defun xl-subi (lst ilst nlst / i a) ;; by 狂刀.2005.8
  17. (if (/= 'LIST (type ilst))(setq ilst (list ilst)))
  18. (if (/= 'LIST (type nlst))(setq nlst (list nlst)))
  19. (apply 'append (mapcar '(lambda(x)
  20.                           (setq i (if i (1+ i) 0))
  21.                           (if (= (car ilst) i)
  22.                             (progn
  23.                               (setq ilst (cdr ilst)
  24.                                     a    (car nlst)
  25.                                     nlst (cdr nlst))
  26.                               (if a (list a x)nil)
  27.                              )
  28.                             (list x)
  29.                            )
  30.                           )
  31.                        lst)
  32. )
  33. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-3 12:57:35 | 显示全部楼层
两位的都很精彩,不要一味在概念理解偏差上纠缠!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-6-17 07:26:48 | 显示全部楼层
先收了再消化!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8727个

财富等级: 富甲天下

发表于 2013-6-22 11:45:57 | 显示全部楼层
感谢eachy 及 狂刀 分享函数!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-28 09:11:44 | 显示全部楼层
感谢两位大侠提供精彩函数,呵呵,不过一时半刻还真消化不了呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-20 14:05:09 | 显示全部楼层
本帖最后由 wowan1314 于 2013-7-20 14:12 编辑

我也来凑热闹!
  1. ;============{ 在指定位置删除或插入元素 }===============
  2. ;nil表示要删除。如果有值为要插入的元素---by wowan1314
  3. ;(t11 '(1 2 3 4 5 6) 2 0);;->(1 2 0 3 4 5 6)
  4. ;(t11 '(1 2 3 4 5 6) 2 nil);;->(1 2 4 5 6)
  5. ;2013年7月20日 星期六
  6. (defun t11 (lst pos mod / qlst a hlst)
  7.     (setq a -1)
  8.     (setq hlst (vl-member-if-not
  9.             '(lambda(x)
  10.                 (setq a (1+ a))
  11.                 (if (= a pos) nil
  12.                     (setq qlst (cons x qlst))
  13.                 )
  14.             )
  15.             lst
  16.         )
  17.     )
  18.     (if mod
  19.         (apply 'append (list (reverse(cons mod qlst)) hlst))
  20.         (apply 'append (list (reverse qlst) (cdr hlst)))
  21.     )
  22. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 862个

财富等级: 财运亨通

发表于 2013-7-20 15:10:01 | 显示全部楼层
来看看,收藏了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·····
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 305个

财富等级: 日进斗金

发表于 2014-3-23 22:23:15 | 显示全部楼层
谢谢老师的分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-2-12 10:36:24 | 显示全部楼层
来看看,收藏了;P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-3-31 11:20:16 | 显示全部楼层
本帖最后由 小菜 于 2021-3-31 12:58 编辑

楼主的函数确实有误,如:(ea:insitem '(1 2 3 4 5 6) 0 0)
狂刀的也有问题 (xl-subi '(1 2 3 4 5 6)  6 0)


点评

确实有bug,可惜Eachy和狂刀潜水太深,都快成为传说中的大神了。 这个板块也是冷清清的。  详情 回复 发表于 2021-4-3 19:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 47个

财富等级: 招财进宝

发表于 2021-4-3 19:22:21 | 显示全部楼层
小菜 发表于 2021-3-31 11:20
楼主的函数确实有误,如:(ea:insitem '(1 2 3 4 5 6) 0 0)
狂刀的也有问题 (xl-subi '(1 2 3 4 5 6)  6 0 ...

确实有bug,可惜Eachy和狂刀潜水太深,都快成为传说中的大神了。
这个板块也是冷清清的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 110个

财富等级: 日进斗金

发表于 2021-4-10 18:08:43 | 显示全部楼层
谢谢分享谢谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-24 18:57 , Processed in 0.439830 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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