明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 858|回复: 10

[讨论] 如何在表的子表增加表项

[复制链接]
发表于 2019-7-31 16:49 | 显示全部楼层 |阅读模式
本帖最后由 jack093 于 2019-7-31 16:50 编辑

如何在表的子表增加表项
;;表项 修改 append 添加
(defun lst-append-nth (lst n item / len ret )
    (setq len (length lst)ret nil)
    (while (> len 0)
        (setq len (1- len))
        (if (= n len)
            (setq ret(cons (cons item (nth len lst)) ret))
            (setq ret(cons (nth len lst)ret))
        )
    )ret
)
(setq lst (lst-append-nth lst  2 4))
(nil nil (4) nil nil nil nil nil nil nil)
(setq lst (lst-append-nth lst  2 3))
(nil nil (3) nil nil nil nil nil nil nil)
上面的代码有问题,
我希望是增加,而不是替换
(nil nil (4 3) nil nil nil nil nil nil nil)




发表于 2019-7-31 18:05 | 显示全部楼层
(lst-append-nth '(1 2 3 4 5 6) 2 999)---->(1 2 (999 . 3) 4 5 6)
你那个函数是这样的
发表于 2019-7-31 18:07 | 显示全部楼层
(lst-append-nth '(nil nil nil nil nil) 2 999)--->(nil nil (999) nil nil)
这种才是你说的那种结果  原来本来就是空值
 楼主| 发表于 2019-7-31 20:21 | 显示全部楼层
本帖最后由 jack093 于 2019-7-31 20:23 编辑

原来的表项或者是nil,或者是列表;
希望结果是
((1) (2) (999  3) (4) (5) (6))
(nil nil (999) nil nil)
这样的结果
发表于 2019-8-1 08:48 | 显示全部楼层
本帖最后由 fangmin723 于 2019-8-1 08:57 编辑


  1. ;;说明:列表更改子项
  2. ;;参数:lst:列表-list
  3. ;;参数:n:更改项索引值-int
  4. ;;参数:item:更改后的值
  5. ;;返回:当n小于列表长度时,返回更改后的列表;否则则返回传入的lst列表。
  6. (defun lst-append-nth(lst n item)
  7.   (if  (< n (length lst))
  8.     (progn
  9.       (setq i 0 mylst nil)
  10.       (foreach itm lst
  11.         (if  (= i n)
  12.           (progn
  13.             (if (and (/= itm nil) (listp itm))
  14.               (setq mylst (append mylst (list (append itm (list item)))))
  15.               (if  (= itm nil)
  16.                 (setq mylst (append mylst (list item)))
  17.                 (setq mylst (append mylst (list (list itm item))))
  18.               )
  19.             )
  20.             (setq i (+ i 1))
  21.           )
  22.           (setq mylst (append mylst (list itm)) i (+ i 1))
  23.         )
  24.       )
  25.       mylst
  26.     )
  27.     (progn
  28.       (princ "\n错误:索引值超出索引界限!")
  29.       lst
  30.     )
  31.   )
  32. )
  33. (setq lst '(nil nil 0 nil nil nil nil nil nil nil) j 1)
  34. (repeat 10
  35.   (setq lst (lst-append-nth lst 2 j) j (+ j 1))
  36.   (print lst)
  37.   (princ)
  38. )
  39. (princ "\n============================================")
  40. (repeat 10
  41.   (setq lst (lst-append-nth lst 5 j) j (+ j 1))
  42.   (print lst)
  43.   (princ)
  44. )
  45. (princ "\n============================================")
  46. (setq lst (lst-append-nth lst 5 '(1 2 3 4 5 6)))
  47. (print lst)
  48. (princ)

本帖子中包含更多资源

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

x
 楼主| 发表于 2019-8-2 10:43 | 显示全部楼层

谢谢版主,问题完满解决
发表于 2019-8-2 11:36 | 显示全部楼层
jack093 发表于 2019-8-2 10:43
谢谢版主,问题完满解决

不客气,能帮到你就不枉费我一番辛苦了。
我不是版主,我也不是谁,我只不过是个乐于助人的路人,仅此而已
发表于 2019-8-2 17:40 | 显示全部楼层
fangmin723 发表于 2019-8-2 11:36
不客气,能帮到你就不枉费我一番辛苦了。
我不是版主,我也不是谁,我只不过是个乐于助人的路人,仅此而 ...

嗯,我们都知道,你是个好人
发表于 2019-8-2 17:41 | 显示全部楼层
fangmin723 发表于 2019-8-2 11:36
不客气,能帮到你就不枉费我一番辛苦了。
我不是版主,我也不是谁,我只不过是个乐于助人的路人,仅此而 ...

嗯,我们都知道,你是个好人
发表于 2019-8-2 22:28 | 显示全部楼层
好人一生平安
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 05:51 , Processed in 0.233340 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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