質問
クエリに対する一意の答えを返すコードを取得しようとするのに問題があります。たとえば、定義
stuff(A,B,C) :- A=C ; B=C.
morestuff([],[],[]).
morestuff([A|AA],[B|BB],[C|CC]) :- stuff(A,B,C), morestuff(AA,BB,CC).
その後、実行します
morestuff([A,A],[A,B],[a,b]).
出力を与えます:
A = a
B = b ? ;
A = a
B = b ? ;
yes.
ご覧のとおり、2つのソリューションは同じです。 Prologに独自のソリューションを返すようにする方法はありますか、i、e。出力を与える:
A = a
B = b ? ;
yes.
解決
使用することもできます
| ?- setof(sol(A,B),morestuff([A,A],[A,B],[a,b]),L).
L = [sol(a,b)] ?
yes
他のヒント
私が知っている唯一の方法は、使用することです findall/3
すべての結果を生成するには、削除して自分自身を複製します。 (最も明白な解決策を除いて - オーバージェネレーションのアルゴリズムを避けてください。しかし、多くの場合、それはできません。)
所属していません StackOverflow