I want to count the number of times a custom predicate is true. For example, I have the following code:
is_man(john).
is_man(alex).
?:-is_man(X).
X
will return john
, then if I press semicolon it will also return alex
, then false
.
I want to build something like:
count(is_man(X), Count).
And this to return
Count = 2
How can I do that?
In SWI-Prolog:
aggregate_all(count, is_man(X), Count).
NB. the first argument count
is one of the special templates:
The Template values
count
,sum(X)
,max(X)
,min(X)
,max(X,W)
andmin(X,W)
are processed incrementally rather than using findall/3 and run in constant memory.