乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 23|回复: 7

[编程交流] 嵌套列表

[复制链接]

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:14:31 | 显示全部楼层 |阅读模式
下午好,提前感谢您的帮助。
 
 
我有一个嵌套列表,希望提取列表嵌套部分中的项目,但不确定如何执行。
 
 
我想没有人能告诉我该找什么?
 
 
例如,我有一个名为mylist的嵌套列表:
(列表0(项目01A项目01B项目01C)列表1(项目1A项目1B项目1C)列表2….)
 
 
我可以使用函数(nth x mylist),其中x是列表编号(1给出“list1”),但我如何从该列表中获取项目?(如第1A项或第2C项等)。
 
 
再次感谢
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:27:35 | 显示全部楼层
它们是您可以使用的示例列表的结构化方式(cadr(成员:
  1. (cadr (member "list2"
  2.       (list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c")
  3.             "list3" '("item3a" "item3b" "item3c")
  4.            )
  5.      )
  6. )

 
如果它的结构更像这样,您可以使用(cdr(assoc:
  1. (cdr (assoc "list2"
  2.     '(("list1" ("item1a" "item1b" "item1c"))
  3.       ("list2" ("item2a" "item2b" "item2c"))
  4.       ("list3" ("item3a" "item3b" "item3c"))
  5.      )
  6.     )
  7. )

 
然后您可以使用vl-some:
  1. (vl-some '(lambda (x)
  2.      (if (= "item2b" x)
  3.        x
  4.      )
  5.    )
  6.   (cadr        (member        "list2"
  7.                 (list "list1" '("item1a" "item1b" "item1c") "list2"
  8.                       '("item2a" "item2b" "item2c") "list3" '("item3a" "item3b" "item3c")
  9.                      )
  10.         )
  11.   )
  12. )
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:37:21 | 显示全部楼层
这对我来说并不适用,但我将查看cadr命令,看看是否可以解决这个问题。
 
 
在上面的示例中,这是否允许您指定要返回嵌套列表中的哪一项?我看不出它是怎么做到的
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:48:33 | 显示全部楼层
您列表中的数据类型是什么?也许发布实际列表?还要注意,如果这些是字符串,则函数区分大小写。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:52:44 | 显示全部楼层
您可能需要研究(原子)函数-大卫
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:59:57 | 显示全部楼层
你好
 
 
列表中的项目是字符串,其形式如下:
 
 
((项目1(项目1A项目2A项目3A项目4A))(项目2(项目2A))(项目3(项目3A))(项目4(项目4A))(项目5(项目5A项目5B项目5C)))
 
 
例程的前面部分组成了列表,这就是它在命令行中的显示方式)
 
 
所以在位置y的列表中寻找嵌套的列表项x。
 
 
如果我这样做(第2个mylist),它将返回“item3”-主列表名。太好了,反正我以后需要。但是看看如何从列表中选择项目1、2或3。如果有意义的话,可以把第2个命令连接起来。
 
 
CDR和CADR说他们只返回列表中的第二项?
 
 
 
 
或者我可以将嵌套列表分开,然后滚动浏览它吗
 
 
 
 
(我使用嵌套列表的原因是我不知道每次会有多少个列表,否则我会选择一组简单的列表,填充每个列表,并以更简单的方式查看它们)
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 17:07:58 | 显示全部楼层
(cadr(成员是您的数据结构所需要的。如果还不太晚,我会将其重组为关联列表。
 
下面是一个使用两个索引号的快速示例。。虽然有很多方法可以剥这只猫的皮
  1. (defun _getsomething (l idx1 idx2) (nth idx2 (cadr (member (nth idx1 l) l))))
  2. (_getsomething
  3. (list        "list1"        '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c") "list3"
  4. '("item3a" "item3b" "item3c")
  5.       )
  6. 2
  7. 2
  8. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:22:06 | 显示全部楼层
回到使用NTH,你可以在这里直接把它们放在多个层次上作为例子
 
  1. (setq lst (list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c")   "list3" '("item3a" "item3b" "item3c")))
  2. (setq num (/ (length lst) 2))
  3. (setq y 0) ;2nd item
  4. (setq x 0)
  5. (repeat num
  6. (setq y 0)
  7. (setq valname (nth x lst))
  8. (setq x (+ x 1))
  9. (setq val1 (nth y (nth x lst)))
  10. (setq val2 (nth (setq y (+ y 1))(nth x lst)))
  11. (setq val3 (nth (setq y (+ y 1))(nth x lst)))
  12. (setq x (+ x 1))
  13. (alert (strcat valname "\n" val1 "\n" val2 "\n" val3))
  14. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 16:36 , Processed in 0.675148 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表