次の問題があります。
プロローグ プログ:
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(Man) :- (->check<-,once(man(Man, _)); man(Man, _).
「チェック」では、変数「Man」が満たされているかどうかをチェックするコードをスナイプする必要があります。
これは可能ですか?