Проверьте, является ли переменная пустой или заполненной

У меня есть следующая проблема:

Пролог прога:

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

проблема:

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

Цель:

?- man(thomas).
true ;

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

Я понимаю, почему это происходит, но все же хочу узнать имена всех людей. Поэтому мое решение было бы посмотреть, инициализирован ли «Человек», если да, чем «один раз ...», то еще ... что-то вроде этого:

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

На «проверке» должен быть фрагмент кода, проверяющий, заполнена ли переменная «Человек».

Это возможно?

Ответы на вопрос(2)

Ваш ответ на вопрос