Найдите, сколько существует одинаковых объектов - PullRequest
0 голосов
/ 28 мая 2011

У меня есть этот код

color(blue).
color(red).
color(blue).
color(green).

Я хочу создать правило, которое будет подсчитывать, сколько раз существует цвет X.Для этого случая count_color (X) должен вернуть 2.

Это возможно таким образом, или мне нужно составить список с цветами?

Ответы [ 2 ]

1 голос
/ 30 мая 2011

aggregate/3 не существует в прологе ISO, поэтому он доступен не во всех реализациях.Но вы можете получить тот же результат, используя findall/3, что и в:

count_color(Color, N) :- findall(_, color(Color), List), length(List, N).
1 голос
/ 28 мая 2011

Это возможно при использовании предиката aggregate/3:

count_color(Color, N) :- aggregate(count, color(Color), N).

Указатель для использования aggregate/3: агрегат / 3 в swi-прологе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...