Prolog を本格的に使用してから長い時間が経ちましたが、Google で検索したり、持っているテキストでこれに関する参照を見つけることができません。これは用語の失敗かもしれないので、私がそれを虐殺した場合は謝罪します.
複数のソリューションを持つ可能性のあるプログラムがある場合:
likes(mary, joe).
likes(bob, joe).
:- likes(X, joe)
ソルバーが一致する述語をランダムな順序で実行し、したがってランダムな順序で結果を与える (または、同等に、最初のソリューションをランダムにする) 簡単な組み込みの方法はありますか?
明らかに、 randomという単語を使用して、好きなだけ洗練することができます。ソルバーの各ステップで有効な述語のセットから均一なランダム サンプリングを考えています。有効な解に対する一様ランダム サンプリングのような、より複雑なものも問題ありません。問題は一般的なものです。
おそらく、乱数ジェネレーターとメタプログラミングを使用して、これを行うプログラムを作成できます。しかし、単純なものが欠けているかどうかを確認したいと思います。