在Clingo中求和多个值

时间:2018-07-19 09:15:55

标签: answer-set-programming clingo

我正在计算clingo中多个字段的总和:

x(1,2,3).
x(4,5,6).
x(7,8,9).

y(A,B,C) :-
    A = #sum { A1, B1, C1 : x(A1,B1,C1) },
    B = #sum { B1, A1, C1 : x(A1,B1,C1) },
    C = #sum { C1, A1, B1 : x(A1,B1,C1) }.

这有效。输出为:

x(1,2,3) x(4,5,6) x(7,8,9) y(12,15,18)

但是,这很乏味。我非常想将它们全部汇总(不起作用):

z(A,B,C) :- (A,B,C) = #sum {(A1,B1,C1) : x(A1,B1,C1)}.

输出为:

test.lp:10:30-38: info: tuple ignored:
  (1,2,3)

test.lp:10:30-38: info: tuple ignored:
  (4,5,6)

test.lp:10:30-38: info: tuple ignored:
  (7,8,9)

有没有一种方法可以简化我的第一种方法?

1 个答案:

答案 0 :(得分:0)

要简化您的方法,请不要这样做:

y(A,B,C) :-
    A = #sum { A1, B1, C1 : x(A1,B1,C1) },
    B = #sum { B1, A1, C1 : x(A1,B1,C1) },
    C = #sum { C1, A1, B1 : x(A1,B1,C1) }.

您可以简单地做到:

y(A, B, C) :- A = #sum{(X) : x(X,_,_)}, B = #sum{(X) : x(_,X,_)}, C = #sum{(X) : x(_,_,X)}.

输出:

enter image description here