在 Clingo 中聚合
Aggregates in clingo
我生成了:
curr(p5,2) curr(p5,1) curr(p5,6)
激光场2+1+6如何求和?
我在 clingo_guild.pdf 的第 21 页看到以下内容:
15 :- not M-2 [ enroll(C) : hours(C,H) = H ] M, max_hours(M).
然后上来:
#sum [pick(P) : curr(P,I) = I].
但我得到:
ERROR: unstratified predicate in:
bus3.lp:73:2: #sum[pick(P)=I:curr(P,I)].
bus3.lp:73:17: curr/2
我正在使用 clingo 3.0.4。感谢您的帮助。
我假设您想要每个 "pick" 的总数,并且我假设 pick 定义为
pick(P) :- curr(P, _).
您应该在代码中说明您指的是哪个选项。在您引用的 clingo3 指南案例中,这不是必需的。
在 clingo3 中:
% clingo3
curr(p4,2). curr(p4,2). curr(p4,6).
curr(p5,2). curr(p5,1). curr(p5,6).
pick(P) :- curr(P, _).
% for each pick P, sum all I from matching curr(P, I)
totals(P, S) :- S = #sum[ curr(P,I) = I ], pick(P).
#hide.
#show totals/2.
而在 clingo4 中,它使用更一致的方式来表达这些:
% clingo4
% ...
totals(P, S) :- S = #sum{ I : curr(P,I)}, pick(P).
#show totals/2.
curr(p5,2). curr(p5,1). curr(p5,6).
sum(S) :- S = #sum{Y: curr(X,Y)}.
输出:
clingo version 5.0.0
Solving...
Answer: 1
curr(p5,2) curr(p5,1) curr(p5,6) sum(9)
SATISFIABLE
我生成了:
curr(p5,2) curr(p5,1) curr(p5,6)
激光场2+1+6如何求和?
我在 clingo_guild.pdf 的第 21 页看到以下内容:
15 :- not M-2 [ enroll(C) : hours(C,H) = H ] M, max_hours(M).
然后上来:
#sum [pick(P) : curr(P,I) = I].
但我得到:
ERROR: unstratified predicate in:
bus3.lp:73:2: #sum[pick(P)=I:curr(P,I)].
bus3.lp:73:17: curr/2
我正在使用 clingo 3.0.4。感谢您的帮助。
我假设您想要每个 "pick" 的总数,并且我假设 pick 定义为
pick(P) :- curr(P, _).
您应该在代码中说明您指的是哪个选项。在您引用的 clingo3 指南案例中,这不是必需的。
在 clingo3 中:
% clingo3
curr(p4,2). curr(p4,2). curr(p4,6).
curr(p5,2). curr(p5,1). curr(p5,6).
pick(P) :- curr(P, _).
% for each pick P, sum all I from matching curr(P, I)
totals(P, S) :- S = #sum[ curr(P,I) = I ], pick(P).
#hide.
#show totals/2.
而在 clingo4 中,它使用更一致的方式来表达这些:
% clingo4
% ...
totals(P, S) :- S = #sum{ I : curr(P,I)}, pick(P).
#show totals/2.
curr(p5,2). curr(p5,1). curr(p5,6).
sum(S) :- S = #sum{Y: curr(X,Y)}.
输出:
clingo version 5.0.0
Solving...
Answer: 1
curr(p5,2) curr(p5,1) curr(p5,6) sum(9)
SATISFIABLE