Чтобы ответить на ваш вопрос буквально, просто используйте:
?- setof(t, member(X, [a,b,a]), _).
X = a
; X = b.
Однако некоторые ответы будут неоптимальными:
?- setof(t,member(a,[a,X]),_).
true
; X = a. % redundant
... тогда как memberd/2
ответы в совершенстве:
?- memberd(a,[a,X]).
true
; false.
Фактически, если вы используете library(reif)
с
memberd(E, [X|Xs]) :-
if_(E = X, true, memberd(E, Xs) ).
, вы получите наилучший возможный ответ:
?- memberd(a,[a,X]).
true.