如何获取谓词中重复值的计数?

How to obtain count of repeated values in predicate?

我正在尝试获取某个玩家获得的相同分数的计数。 例如,如果我有 score(p1, 1), score(p2, 1), score(p3, 2),我想获得一个新的 predicate occurences(Score, Count) with result(1,2) and result (2,1), 因为有两次得到1分,只有一次得到2分

我尝试使用以下程序计算出现的次数:

getScore(S) :- 分数(P,S).

出现次数(S,L) :- L = #count{Sc : score(P,Sc)}, getScore(S).

但是,获取的值不正确:occurences(1,2),occurences(2,2)。 分数 2 应该只有一个计数,如上所述。

你可以这样想你的问题:有多少玩家得到了那个分数?然后数那些玩家 #count{Player : score(Player, S)}:

occurences(S, L) :- L = #count{P : score(P, S)}, score(_, S).