对于列表中的每个元素

时间:2013-11-22 15:45:16

标签: prolog

我是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说的那样进行迭代。

1 个答案:

答案 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)).

效果更好?