乐筑天下

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

[编程交流] 合并主控形状的两个子列表

[复制链接]

42

主题

173

帖子

132

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-5 16:14:59 | 显示全部楼层 |阅读模式
大家好。。。
 
我有一个由子列表组成的列表
(
(B1 B2)
(B3 B4)
(B5 B6)
)
 
我需要一种方法来合并它们的两个子列表,比如:(B1 B2)(B3 B4)一起成为
(B1 B2 B3 B4)
 
最终的主列表如下所示
(
(B1 B2 B3 B4)
(B5 B6)
)
 
函数应该由我需要合并的两个子列表的“n”位置提供。。。
 
谢谢并致以最良好的问候
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:29:53 | 显示全部楼层
假设结果应出现在最高索引处:
  1. (defun mergesublists ( idx lst / i l m )
  2.    (setq m (apply 'max idx)
  3.          i -1
  4.    )
  5.    (vl-remove nil
  6.        (mapcar
  7.           '(lambda ( x )
  8.                (if (member (setq i (1+ i)) idx)
  9.                    (progn (setq l (append l x)) (if (= m i) l))
  10.                    x
  11.                )
  12.            )
  13.            lst
  14.        )
  15.    )
  16. )

 
  1. _$ (setq lst '((B1 B2)(B3 B4)(B5 B6)))
  2. ((B1 B2) (B3 B4) (B5 B6))
  3. _$ (mergesublists '(0 1) lst)
  4. ((B1 B2 B3 B4) (B5 B6))
  5. _$ (mergesublists '(0 2) lst)
  6. ((B3 B4) (B1 B2 B5 B6))
  7. _$ (mergesublists '(1 2) lst)
  8. ((B1 B2) (B3 B4 B5 B6))
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-5 16:35:38 | 显示全部楼层
工作正常。。。。谢谢李先生
我需要更多的建议来完成我的项目请。。。我不能从包含其他子列表的主列表中删除整个子列表(B1 B2)
'((B1 B2)(B3 B4)(B5 B6))
使用(vl remove(nth 0 lst)lst)对我不起作用。。。有什么建议吗?提前谢谢
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 16:42:04 | 显示全部楼层
汉达斯,你写的方式是正确的。这将返回没有元素的列表(元素的每一次出现都要小心)。在我的示例中,它如何删除这两个0。
还有一件事:它返回不带元素的列表,但您没有用结果重新定义(setq)lst,这可能是您说它不起作用的原因。
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-5 16:49:38 | 显示全部楼层
 
你好,杰夫
... 我检查了一下,这次它对我有效。。。可能是我写的代码不正确。。。谢谢jef
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 16:54:16 | 显示全部楼层
不客气!
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:02:08 | 显示全部楼层
 
李,为什么不使用布尔值呢?
 
顺便说一句,考虑到你发布的这些子功能的数量,你真是令人印象深刻!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:09:06 | 显示全部楼层
 
谢谢你,Grrr-但是你建议在哪里使用布尔值?以什么方式?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:17:29 | 显示全部楼层
 
因此,结果可能出现在最低/最高索引处,具体取决于它-即:
 
  1. _$ (setq lst '((B1 B2)(B3 B4)(B5 B6)))
  2. ((B1 B2) (B3 B4) (B5 B6))
  3. _$ (mergesublists '(0 2) lst nil)
  4. ((B3 B4) (B1 B2 B5 B6))
  5. _$ (mergesublists '(0 2) lst T)
  6. ((B1 B2 B5 B6) (B3 B4))

 
但经过重新思考,用户可能会为“idx”参数提供如下列表:'(0 5 8 9)
所以我的建议可能不太好。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 16:59 , Processed in 0.485852 second(s), 70 queries .

© 2020-2025 乐筑天下

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