clingo

时间:2015-04-30 17:39:21

标签: answer-set-programming 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。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我假设你想要每个"选择"的总数,我认为选择被定义为

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.

答案 1 :(得分:0)

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