考虑一下用 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中执行有序求和?
最佳答案
万一有人遇到这个问题,我找到了解决方案。问题是版本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中找到了此解决方案。
关于compiler-errors - asp(clingo): why are ordered sums not working,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41549083/