gpt4 book ai didi

list - 根据列表中的值对列表元素进行分组

转载 作者:行者123 更新时间:2023-12-02 16:23:04 25 4
gpt4 key购买 nike

我有一个元素列表(元组):

tuples(
[
(a,b,[1,3,5,7]),
(a,b,[9,11,13,15]),
(a,b,[17,19,21,23]),
(c,d,[0,2,4,6]),
(c,d,[8,10,12,14]),
(c,d,[16,18,20,22]),
(e,f,[100,200,300,400]),
(e,f,[500,600,700,800]),
(e,f,[900,1000,1100,1200])
]
).

如何对它们进行分组,使其变为:

[
(a,b,[1,3,5,7,9,11,13,15,17,19,21,23]),
(c,d,[0,2,4,6,8,10,12,14,16,18,20,22]),
(e,f,[100,200,300,400,500,600,700,800,900,1000,1100,1200])
]

如我们所见,我们将 (a,b) (c,d) (e,f) 分组并连接它们各自的列表。

谢谢你的帮助。

最佳答案

这种有点像 SQL 的方式怎么样:

定义一个谓词来访问原始深层和讨厌的数据结构中的数据(它使用连词 (_,_) 来创建看起来像 n 元组但实际上“接近”列表的内容,除了在最终位置的 Backbone )。在回溯时,它将拉出个人一条一条记录,并在head变量中呈现其中的信息:

some_tuple(V,W,Values) :- 
tuples(Tuples),
member((V,W,Values), Tuples).

然后使用 2 级收集 bagof/3打电话。

solution(Bag) :-
bagof((V,W,FlatBagForVW), % will backtrack over V,W
SubBag^(bagof(L,some_tuple(V,W,L),BagForVW), % collect lists for a given V,W
flatten(BagForVW,FlatBagForVW)), % flatten it
Bag). % what we want

完成!

如果你在 SWI-Prolog 中,首先告诉顶层打印机不要省略太多长列表:

?-
set_prolog_flag(answer_write_options,[max_depth(100)]).

然后:

?-
solution(Bag).

Bag = [(a,b,[1,3,5,7,9,11,13,15,17,19,21,23]),
(c,d,[0,2,4,6,8,10,12,14,16,18,20,22]),
(e,f,[100,200,300,400,500,600,700,800,900,1000,1100,1200])].

关于list - 根据列表中的值对列表元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65133897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com