合并主控形状的两个子列表
大家好。。。我有一个由子列表组成的列表
(
(B1 B2)
(B3 B4)
(B5 B6)
)
我需要一种方法来合并它们的两个子列表,比如:(B1 B2)(B3 B4)一起成为
(B1 B2 B3 B4)
最终的主列表如下所示
(
(B1 B2 B3 B4)
(B5 B6)
)
函数应该由我需要合并的两个子列表的“n”位置提供。。。
谢谢并致以最良好的问候 假设结果应出现在最高索引处:
(defun mergesublists ( idx lst / i l m )
(setq m (apply 'max idx)
i -1
)
(vl-remove nil
(mapcar
'(lambda ( x )
(if (member (setq i (1+ i)) idx)
(progn (setq l (append l x)) (if (= m i) l))
x
)
)
lst
)
)
)
_$ (setq lst '((B1 B2)(B3 B4)(B5 B6)))
((B1 B2) (B3 B4) (B5 B6))
_$ (mergesublists '(0 1) lst)
((B1 B2 B3 B4) (B5 B6))
_$ (mergesublists '(0 2) lst)
((B3 B4) (B1 B2 B5 B6))
_$ (mergesublists '(1 2) lst)
((B1 B2) (B3 B4 B5 B6)) 工作正常。。。。谢谢李先生
我需要更多的建议来完成我的项目请。。。我不能从包含其他子列表的主列表中删除整个子列表(B1 B2)
'((B1 B2)(B3 B4)(B5 B6))
使用(vl remove(nth 0 lst)lst)对我不起作用。。。有什么建议吗?提前谢谢 汉达斯,你写的方式是正确的。这将返回没有元素的列表(元素的每一次出现都要小心)。在我的示例中,它如何删除这两个0。
还有一件事:它返回不带元素的列表,但您没有用结果重新定义(setq)lst,这可能是您说它不起作用的原因。
你好,杰夫
... 我检查了一下,这次它对我有效。。。可能是我写的代码不正确。。。谢谢jef 不客气!
李,为什么不使用布尔值呢?
顺便说一句,考虑到你发布的这些子功能的数量,你真是令人印象深刻!
谢谢你,Grrr-但是你建议在哪里使用布尔值?以什么方式?
因此,结果可能出现在最低/最高索引处,具体取决于它-即:
_$ (setq lst '((B1 B2)(B3 B4)(B5 B6)))
((B1 B2) (B3 B4) (B5 B6))
_$ (mergesublists '(0 2) lst nil)
((B3 B4) (B1 B2 B5 B6))
_$ (mergesublists '(0 2) lst T)
((B1 B2 B5 B6) (B3 B4))
但经过重新思考,用户可能会为“idx”参数提供如下列表:'(0 5 8 9)
所以我的建议可能不太好。
页:
[1]