SWI-Prolog で CLP 問題を解決しようとしています。このタスクはシマウマの問題に非常に似ています。1 から 5 までのドメインを持つ合計 25 の変数があります。したがって、関連する変数は同じタグを取得します。(プログラムはハンガリー語で書かれています。)
変数に割り当てられたラベルだけでなく、テーブル内の関連する変数も出力に表示したいと考えています。これを行う方法はありますか?
% Constraint Logic Programming
:- use_module(library(clpfd)).
:- use_module(library(lists)).
% Your program goes here
egyetemista(X, All):-
All = [Egressy,Fenyvesi,Gallyas,Jeney,Vadkerti,
Edina, Frida, Gabriella, Jozsef, Vince,
Budapest,Debrecen,Miskolc,Pecs,Szeged,
Biologia,Informatika,Jog,Kemia,Magyar],
All ins 1..5,
all_different([Egressy,Fenyvesi,Gallyas,Jeney,Vadkerti]),
all_different([Edina, Frida, Gabriella, Jozsef, Vince]),
all_different([Budapest,Debrecen,Miskolc,Pecs,Szeged]),
all_different([Biologia,Informatika,Jog,Kemia,Magyar]),
Fenyvesi #= Jog,
Fenyvesi #\= Debrecen,
Fenyvesi #\= Jozsef,
Fenyvesi #\= Vince,
Jozsef #\= Gallyas,
Jozsef #\= Biologia,
Jozsef #= Budapest,
Vadkerti #= Gabriella,
Vadkerti #\= Kemia,
Vadkerti #\= Szeged,
Gabriella #\= Kemia,
Gabriella #\= Szeged,
Kemia #= Szeged,
Jeney #= Pecs,
Jeney #\= Vince,
Frida #= Magyar,
Edina #= Egressy #\ Edina #= Miskolc,
Informatika #\= Edina,
Informatika #\= Frida,
Informatika #\= Gabriella,
labeling([], All),
%Szak:
nth0(N, All, Szeged),
nth0(N, All, X).
%egyetemista(X, All)
このようにプログラムを実行すると、出力は次のようになります。 All = [1, 2, 3, 4, 5, 2, 4, 5, 1, 3, 1, 5, 2, 4, 3, 5, 1, 2 、3、4]、X = 3
これは、変数「Szeged」に割り当てられたラベルが 3 であることを意味し、関連する変数は、出力で 3 のラベルを持つすべてのリストから変数を置き換えることによって取得されます。たとえば、表の最初の行は「gallyas vince szeged kemia」のようになります。
よろしくお願いします。