Sprawdź, czy zmienna jest pusta lub wypełniona

Mam następujący problem:

prolog prog:

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

problem:

?- 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*

cel:

?- man(thomas).
true ;

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

Nie rozumiem, dlaczego tak się dzieje, ale wciąż chcę uzyskać nazwiska wszystkich ludzi. Więc moim rozwiązaniem byłoby sprawdzenie, czy „Człowiek” jest zainicjowany, jeśli tak, to „raz ..”, a następnie… coś w tym stylu:

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

Przy „sprawdzaniu” powinien być kod sniped, który sprawdza, czy zmienna „Man” jest wypełniona.

czy to możliwe?

questionAnswers(2)

yourAnswerToTheQuestion