2

私は生成しました:

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

クリンゴ 3.0.4 を使用しています。ご協力ありがとうございました。

4

2 に答える 2

1

各「ピック」の合計が必要になると想定しています。ピックは次のように定義されていると想定しています

pick(P) :- curr(P, _).

コードで、どのピックを意味するかを伝える必要があります。あなたが引用したclingo3ガイドのケースでは、これは必要ありません。

clgo3 で:

% 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.
于 2015-05-02T05:20:11.230 に答える