免責事項:私はクリンゴにほぼ完全に慣れておらず、セットプログラミング全般に答えています。
クリンゴを使用してグリッド ロジック パズルを解こうとしています。まず、各カテゴリのインスタンスを 1 つ含むすべてのモデルを生成します。
たとえば、3 人の人:
person(a; b; c).
、3 つの家: house(w; x; z).
、および 3 つの色:
color(r; g; y).
assign(a, r, x), assign(b, g, z), assign(c, y, w)
1 つの潜在的な安定モデルを に、別の潜在的な安定モデルを
などにしたいと思い
assign(a, g, w), assign(b, y, z), assign(c, r, x)
ます。これらのモデルを取得したら、パズルが解決されるまで制約を使用してモデルを削除できると考えています。
選択規則と制約を使用してみました:
{assign(P, C, H)} :- person(P), color(C), house(H).
P1=P2 :- assign(P1, C, H), assign(P2, C, H).
しかし、これは多くの変数を持つ大規模なパズルにはあまり拡張できません。誰でもこれを行うためのより良い方法をアドバイスできますか?