Prolog を使用して論理問題を解決する必要があります。問題が 1 つだけあります。
回答では、属性の名前は表示されません。属性を生成する私のコードは次のとおりです。
gera(p(Prof, AlunosProf, Tema, AlunosTema)) :-
member(Prof, [palmira, roberta, selma]),
member(AlunosProf, [40, 45, 50]),
member(Tema, [transito, culinaria, reciclagem]);
member(AlunosTema, [40, 45, 50]).
しかし、クエリを実行すると、次のようになります。
S = [p(palmira, _G2046, transito, 45),
p(roberta, 50, reciclagem, _G2053),
p(selma, _G2056, culinaria, _G2058)]
「_G* something 」はどこにあるのか 属性の名前を表示したい(この場合は学生の数のみ)。
編集:
コード全体を追加します。
gera(p(Prof, AlunosProf, Tema, AlunosTema)) :-
member(Prof, [palmira, roberta, selma]),
member(AlunosProf, [40, 45, 50]),
member(Tema, [transito, culinaria, reciclagem]),
member(AlunosTema, [40, 45, 50]).
dif(p(P1, Q1, T1, Q12), p(P2, Q2, T2, Q22)) :-
P1 \= P2, Q1 \= Q2, Q12 \= Q22, T1 \= T2.
tudoDif(P1, P2, P3) :-
dif(P1, P2), dif(P1, P3), dif(P2, P3).
gera_ef(P1, P2, P3) :-
P1 = p(palmira, _, _, _),
P2 = p(roberta, _, _, _),
P3 = p(selma, _, _, _).
gera(P1), gera(P2), gera(P3),
tudoDif(P1,P2,P3).
solucao(S) :-
S = [P1, P2, P3],
gera_ef(P1, P2, P3),
member(p(palmira, X, transito, 45), S),
member(p(selma, Z, culinaria, W), S),
member(p(roberta, 50, reciclagem, R), S),
!.