gpt4 book ai didi

prolog - 列表元素的排列组合 - Prolog

转载 作者:行者123 更新时间:2023-12-02 09:43:40 25 4
gpt4 key购买 nike

如何生成列表元素的所有可能组合?

例如,给定列表[1,2,3],我想设计一个具有comb([1,2,3], L)形式的谓词。 应该返回以下 L 的答案:

[1]  
[2]
[3]
[1,2]
[2,1]
[1,3]
[3,1]
[2,3]
[3,2]
[1,2,3]
[1,3,2]
[2,1,3]
[2,3,1]
[3,1,2]
[3,2,1]

最佳答案

您要求的内容涉及列表的组合(选择子集)和排列(重新排列顺序)。

您的示例输出意味着空列表不被视为有效的解决方案,因此我们将在接下来的实现中将其排除。重新考虑这是否是一个疏忽。此外,此实现以与示例输出不同的顺序生成解决方案。

comb(InList,Out) :-
splitSet(InList,_,SubList),
SubList = [_|_], /* disallow empty list */
permute(SubList,Out).

splitSet([ ],[ ],[ ]).
splitSet([H|T],[H|L],R) :-
splitSet(T,L,R).
splitSet([H|T],L,[H|R]) :-
splitSet(T,L,R).

permute([ ],[ ]) :- !.
permute(L,[X|R]) :-
omit(X,L,M),
permute(M,R).

omit(H,[H|T],T).
omit(X,[H|L],[H|R]) :-
omit(X,L,R).

与 Amzi 一起测试!序言:

?- comb([1,2,3],L).

L = [3] ;

L = [2] ;

L = [2, 3] ;

L = [3, 2] ;

L = [1] ;

L = [1, 3] ;

L = [3, 1] ;

L = [1, 2] ;

L = [2, 1] ;

L = [1, 2, 3] ;

L = [1, 3, 2] ;

L = [2, 1, 3] ;

L = [2, 3, 1] ;

L = [3, 1, 2] ;

L = [3, 2, 1] ;
no

关于prolog - 列表元素的排列组合 - Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578755/

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