Verifique se a variável está vazia ou preenchida

Eu tenho o seguinte problema:

prólogo prog:

man(thomas, 2010).
man(leon, 2011).
man(thomas, 2012).
man(Man) :- once(man(Man, _).

problema:

?- man(thomas).
true ;        %i want only on true even if there are more "thomas" *working because of once()*

?- man(X).
X = thomas ;  %i want all man to be listed *isn't working*

objetivo:

?- man(thomas).
true ;

?- man(X).
X = thomas ;
X = leon ;
X = thomas ;

Eu entendo por que isso acontece, mas ainda quero obter os nomes de todos os homens. Portanto, minha solução seria procurar se "Man" foi inicializado, se sim, que "once .." else else ... então algo assim:

man(Man) :- (->check<-,once(man(Man, _)); man(Man, _).

Em "check", deve ser o código sniped que verifica se a variável "Man" está preenchida.

Isso é possível?

questionAnswers(2)

yourAnswerToTheQuestion