asp(clingo):为什么订购的金额不起作用

时间:2017-01-09 13:24:26

标签: compiler-errors answer-set-programming clingo

考虑以 clingo 编译的followig代码。

档案test.lp。编译命令:clingo 0 test.lp

col(("rot";"blau")).

freq("rot","hell",2). freq("rot","dunkel",2). freq("rot","hell",5).
freq("blau","hell",20). freq("blau","dunkel",30). freq("blau","hell",50).

freq_sum(C,F) :- F = #sum{ X : freq(C,_,X) }, col(C).
%% does not work: >>error: syntax error, unexpected [, expecting {<<
% freq_sum(C,F) :- F = #sum[ X : freq(C,_,X) ], col(C).

#show freq_sum/2.

代码应计算每种颜色的频率总和。对于"red",这应该是9,对于“blue",这应该是100。对于"red",值2计算两次。当我将{...}替换为[…]时,这应该使列表成为有序列表并传递有序总和,编译器会抱怨error: syntax error, unexpected [, expecting {。我有clingo version 4.5.4。我的代码或编译器有问题吗?

有人可以告诉我,我如何在asp中执行有序的总和?

1 个答案:

答案 0 :(得分:0)

如果有人遇到这个问题,我找到了解决方案。问题是版本4中的clingo / gringo版本不支持多集。只能通过{...}进入列表。然而,有一种方法可以防止多个元素崩溃。

freq_sum(C,F) :- F = #sum{ X,H : freq(C,H,X) }, col(C).

命名发生索引的对象,允许对列表中的每个项进行唯一标记,从而防止将重复值视为单个元素。我在http://ceur-ws.org/Vol-1645/paper_9.pdf的§2中找到了这个解决方案。