gpt4 book ai didi

list - 多个列表的组合 - Prolog

转载 作者:行者123 更新时间:2023-12-03 19:42:50 27 4
gpt4 key购买 nike

我需要在列表列表中找到组合。例如,给出以下列表,

List = [[1, 2], [1, 2, 3]]

这些应该是输出,
Comb = [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3]]

另一个例子:
List = [[1,2],[1,2],[1,2,3]]

Comb = [[1,1,1],[1,1,2],[1,1,3],[1,2,1],[1,2,2],[1,2,3]....etc]

我知道如何为具有两个子列表的列表执行此操作,但它需要适用于任意数量的子列表。

我是 Prolog 的新手,请帮忙。

最佳答案

这个答案寻找“为一个纯粹的解决方案提供的赏金,同时也考虑到 Ess”。
这里我们概括this previous answer像这样:

list_crossproduct(Xs, []) :-
member([], Xs).
list_crossproduct(Xs, Ess) :-
Ess = [E0|_],
same_length(E0, Xs),
maplist(maybelonger_than(Ess), Xs),
list_comb(Xs, Ess).

maybelonger_than(Xs, Ys) :-
maybeshorter_than(Ys, Xs).

maybeshorter_than([], _).
maybeshorter_than([_|Xs], [_|Ys]) :-
maybeshorter_than(Xs, Ys).
list_crossproduct/2通过关联获得双向 XsEss早期的。
?- list_comb(Xs, [[1,2,3],[1,2,4],[1,2,5]]).nontermination                                % BAD!?- list_crossproduct(Xs, [[1,2,3],[1,2,4],[1,2,5]]).   Xs = [[1],[2],[3,4,5]]      % this now works, too;  false.

Sample query having multiple answers:

?- list_crossproduct(Xs, [[1,2,3],[1,2,4],[1,2,5],X,Y,Z]).
X = [1,2,_A],
Y = [1,2,_B],
Z = [1,2,_C], Xs = [[1],[2],[3,4,5,_A,_B,_C]]
; X = [1,_A,3],
Y = [1,_A,4],
Z = [1,_A,5], Xs = [[1],[2,_A],[3,4,5]]
; X = [_A,2,3],
Y = [_A,2,4],
Z = [_A,2,5], Xs = [[1,_A],[2],[3,4,5]]
; false.

关于list - 多个列表的组合 - Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60580822/

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