У меня есть этот код
color(blue). color(red). color(blue). color(green).
Я хочу создать правило, которое будет подсчитывать, сколько раз существует цвет X.Для этого случая count_color (X) должен вернуть 2.
Это возможно таким образом, или мне нужно составить список с цветами?
aggregate/3 не существует в прологе ISO, поэтому он доступен не во всех реализациях.Но вы можете получить тот же результат, используя findall/3, что и в:
aggregate/3
findall/3
count_color(Color, N) :- findall(_, color(Color), List), length(List, N).
Это возможно при использовании предиката aggregate/3:
count_color(Color, N) :- aggregate(count, color(Color), N).
Указатель для использования aggregate/3: агрегат / 3 в swi-прологе