[Prolog]論理パズル/帽子は何色?

意外とすっきりした解答が得られたので。

意外とすっきりした解答が得られたので。

/*
3 a, b, c 5(×3, ×2)31
2(∵)
a……
b……
――c
% (' ', page: 16).
% ()
*/
insert(E, Set, [E|Set]).
insert(E, [X|Set0], [X|Set]) :- insert(E, Set0, Set).
([], X).
([H|L], R) :- insert(H, R0, R), (L, R0).
(X, Cond) :- % Cond X
setof(X, Cond, L), \+(length(L, 1)).
?- _hats = [, , , , ], %
A = , B = , (C = ; C = ),
% ([A, B, C], _hats),
% a ASelf
(ASelf, ([ASelf, B, C], _hats)),
% a ASelf
% b BSelf
(BSelf, (
([A, BSelf, C], _hats),
(ASelf2, ([ASelf2, BSelf, C], _hats))
)).
% A = , B = , C =
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX