我有以下问题:
序言编:
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”是否被初始化,如果是,则比“once ..”否则......类似这样的东西:
man(Man) :- (->check<-,once(man(Man, _)); man(Man, _).
在“检查”上应该是检查变量“Man”是否被填充的代码。
这可能吗?