Я бы прибегнул ко всемогущему findall/3
, чтобы решить вашу проблему.
?- findall(Fruit, likes(a, Fruit), Fruits), length(Fruits, N).
Fruits = [apple,banana,orange]
N = 3
Таким образом, ваш counts(a, Var)
- это просто вызов findall/3
(даже если он действительно собирает вместо подсчета):
counts(Person, Fruits) :- findall(Fruit, likes(Person, Fruit), Fruits).
И в результате вы получите следующее:
?- counts(a, Var).
Var = [apple,banana,orange]