На всякий случай, если вы не хотите изобретать велосипед.
Существует квазистандарт, называемый библиотекой (агрегатом). Но библиотека (агрегат) также может быть реализована поверх базового стандарта ISO bagof / 3, который также поможет вам:
Welcome to SWI-Prolog (threaded, 64 bits, version 8.1.6)
?- aggregate(count, member(X,[1, 2, 3, 1, 3, 2, 3, 1]), R).
X = 1,
R = 3 ;
X = R, R = 2 ;
X = R, R = 3.
?- bagof(hit, member(X,[1, 2, 3, 1, 3, 2, 3, 1]), L), length(L, R).
X = 1,
L = [hit, hit, hit],
R = 3 ;
X = R, R = 2,
L = [hit, hit] ;
X = R, R = 3,
L = [hit, hit, hit].
Или в другой системе Prolog:
Jekejeke Prolog 3, Runtime Library 1.3.7 (May 23, 2019)
?- use_module(library(advanced/aggregate)).
% 3 consults and 0 unloads in 110 ms.
Yes
?- use_module(library(basic/lists)).
% 0 consults and 0 unloads in 0 ms.
Yes
?- aggregate(count, member(X,[1, 2, 3, 1, 3, 2, 3, 1]), R).
X = 1,
R = 3 ;
X = 2,
R = 2 ;
X = 3,
R = 3
?- bagof(hit, member(X,[1, 2, 3, 1, 3, 2, 3, 1]), L), length(L, R).
X = 1,
L = [hit,hit,hit],
R = 3 ;
X = 2,
L = [hit,hit],
R = 2 ;
X = 3,
L = [hit,hit,hit],
R = 3