我是prolog的新手,我有一个问题。
我得到了一个像[7,88,10,11]这样的数字列表,我想做的是:
for each element in [7,88,10,11] A
for each element in [88,10,11] B
for each element in [10,11] C
write(A-B-C).
我想要列表中的所有组合(3个元素的排列)。
谢谢!
编辑:该列表是一个示例,实际列表为L:
list(L,J) :- findall(X,(task(X,K),K==J),L).
那么我想按照我通过列表L说的那样进行迭代。
答案 0 :(得分:0)
实际的prolog代码与您的描述非常相似
?- forall((member(A, [7,88,10,11]),
member(B, [88,10,11]),
member(C, [10,11])
), writeln(A-B-C)).
您可以将逗号运算符视为SQL中的连接(在简单语法中选择*来自A,B,C)
编辑:当然,该代码 与您的描述完全相似。应该是
?- forall(member(A, [7,88,10,11]),
forall(member(B, [88,10,11]),
forall(member(C, [10,11]), writeln(A-B-C)))).
(希望我平衡右括号......)
编辑:对不起,我完全错过了A,B,C之间的关系。确实
?- L = [7,88,10,11],
forall((select(A,L,L1),
select(B,L1,L2),
member(C,L2)
), writeln(A-B-C)).
效果更好?