Как получить количество повторяющихся значений в предикате?

Я пытаюсь получить количество равных очков, полученных каким-либо игроком. Например, если у меня есть оценка (p1, 1), оценка (p2, 1), оценка (p3, 2), я хотел бы получить новые вхождения предиката (оценка, количество) с результатом (1,2) и результатом (2,1), так как оценка 1 была получена два раза, а оценка 2 только один раз.

Я попытался подсчитать количество вхождений с помощью следующей программы:

getScore(S):- счет(P,S).

вхождения(S,L):- L = #count{Sc : score(P,Sc)}, getScore(S).

Однако полученные значения неверны: вхождения (1,2), вхождения (2,2). Оценка 2 должна иметь только один счет, как указано выше.


person OS WL    schedule 21.12.2018    source источник


Ответы (1)


Вы могли бы ответить на свой вопрос так: сколько игроков набрали этот результат? Затем посчитайте этих игроков #count{Player : score(Player, S)}:

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