gpt4 book ai didi

prolog - 获取序言中的所有列表集

转载 作者:行者123 更新时间:2023-12-03 20:10:55 25 4
gpt4 key购买 nike

如何生成具有当前长度的列表元素的所有可能集合?

?- get_set(X, [1,2,3]).  
X = [1,1,1] ;
X = [1,1,2] ;
X = [1,1,3] ;
X = [1,2,1] ;
X = [1,2,2] ;
X = [1,2,3] ;
X = [1,3,1] ;
X = [1,3,2] ;
X = [1,3,3] ;
.....
X = [3,3,2] ;
X = [3,3,3].

UPD:Sharky 给出了很好的答案。
但也许这不是最好的。这是另一个:
get_set(X,L) :- get_set(X,L,L).

get_set([],[],_).
get_set([X|Xs],[_|T],L) :- member(X,L), get_set(Xs,T,L).

最佳答案

考虑:

get_set(L0, L) :-
length(L, Len),
length(L0, Len),
apply_elem(L0, L).

apply_elem([], _).
apply_elem([X|Xs], L) :-
member(X, L),
apply_elem(Xs, L).

说明:

确定输入列表的长度 LLen允许我们生成一个唯一变量列表, L0 , 通过 length/2 .然后,我们简单地应用 L 的元素致 L0 的所有成员通过 member/2 ,如果它们存在(即,如果列表 L 的长度 > 1),则为选项留下选择点。 Prolog 将回溯以生成 L 元素的所有可能组合。进入列表 L0 , 按要求。

关于prolog - 获取序言中的所有列表集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653784/

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