質問

クエリに対する一意の答えを返すコードを取得しようとするのに問題があります。たとえば、定義

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 すべての結果を生成するには、削除して自分自身を複製します。 (最も明白な解決策を除いて - オーバージェネレーションのアルゴリズムを避けてください。しかし、多くの場合、それはできません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top