明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 984|回复: 4

[提问] 请教:修改深藏在多重列表中的元素值

[复制链接]
发表于 2014-3-1 00:10 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 etoxp 于 2014-3-1 00:13 编辑

有一个多重列表,我想修改深藏在这个列表中的某元素的值,返回更新后的列表,程序要怎么写呢?有没有简单的实现方法?
譬如:我想修改下面列表中ABB2的值,要怎么做呢? ABB3的位置可以用一个定位列表来表示,譬如'(0 1 1 2)
(setq List0 (list
              (list
                (list
                  (list AAA1 AAA2 AAA3)
                  (list AAB1 AAB2 AAB3)
                  (list AAC1 AAC2 aAC3)
                )
                (list
                  (list ABA1 ABA2 ABA3)
                  (list ABB1 ABB2 ABB3)
                  (list ABC1 ABC2 ABC3)
                )
              )
              (list
                (list
                  (list BAA1 BAA2 BAA3)
                  (list BAB1 BAB2 BAB3)
                  (list BAC1 BAC2 BAC3)
                )
                (list
                  (list BBA1 BBA2 BBA3)
                  (list BBB1 BBB2 BBB3)
                  (list BBC1 BBC2 BBC3)
                )
              )
            )
)
  1. (setq List0 (list
  2.         (list
  3.     (list
  4.       (list AAA1 AAA2 AAA3)
  5.       (list AAB1 AAB2 AAB3)
  6.       (list AAC1 AAC2 aAC3)
  7.     )
  8.     (list
  9.       (list ABA1 ABA2 ABA3)
  10.       (list ABB1 ABB--2 ABB3)
  11.       (list ABC1 ABC2 ABC3)
  12.     )
  13.         )
  14.         (list
  15.     (list
  16.       (list BAA1 BAA2 BAA3)
  17.       (list BAB1 BAB2 BAB3)
  18.       (list BAC1 BAC2 BAC3)
  19.     )
  20.     (list
  21.       (list BBA1 BBA2 BBA3)
  22.       (list BBB1 BBB2 BBB3)
  23.       (list BBC1 BBC2 BBC3)
  24.     )
  25.         )
  26.       )
  27. )

最佳答案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-3-1 00:10 | 显示全部楼层
本帖最后由 Gu_xl 于 2014-3-12 12:54 编辑

  1. (defun f (l ll a / i b)  (if (and
  2.         (listp l)
  3.         (setq b (car ll))
  4.         (setq i -1)
  5.       )
  6.     (mapcar
  7.       '(lambda (x)
  8.          (setq i (1+ i))
  9.          (if (/= i b)
  10.            x
  11.            (if (cdr ll)
  12.              (f x (cdr ll) a)
  13.              a
  14.            )
  15.          )
  16.        )
  17.       l
  18.     )
  19.     l
  20.   )
  21. )
  22. ;;测试 (f list0 '(0 1 1 2) "ABB#")
回复

使用道具 举报

 楼主| 发表于 2014-3-11 20:22 | 显示全部楼层
是不是我问的问题太简单了,感觉貌似要用递归来实现。
回复

使用道具 举报

发表于 2014-3-11 22:05 来自手机 | 显示全部楼层
etoxp 发表于 2014-3-11 20:22
是不是我问的问题太简单了,感觉貌似要用递归来实现。

想来也是用递归,不过,你把表整这么深干什么呢?
回复

使用道具 举报

 楼主| 发表于 2014-3-13 11:56 | 显示全部楼层
Gu_xl 发表于 2014-3-12 12:53

谢谢G版,非常感谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 23:43 , Processed in 0.237884 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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