08/05/24 18:03:55
>>94
山根の証言が正しいことを前提にしてたのは、そうしないとヤマネも犯人になっちゃってたからw
あと、not を使うのが怖いってどういう意味?
ともかく、>>93を参考にしてもう一回問題を読み直して、ヤマネの証言に依存しないようにした
truth(Is) :- % 単独犯である
Is = [ [rabbit, g], [hatman, n], [yamane, n] ] ;
Is = [ [rabbit, n], [hatman, g], [yamane, n] ] ;
Is = [ [rabbit, n], [hatman, n], [yamane, g] ] .
rabbit_says(Is) :- % ウサギの証言
member( [rabbit, n], Is ). % 俺はやってない
hatman_says(Is) :- % 帽子屋の証言
member( [hatman, n], Is ). % 俺もやってない
yamane_says(Is) :- % ヤマネの証言
¥+( ( ¥+rabbit_says(Is), ¥+hatman_says(Is) ) ).
%% ウサギと帽子屋の両方が嘘を言っていることはあり得ない
more_research(Is) :- % その後の調査
¥+( ( rabbit_says(Is), yamane_says(Is) ) ).
%% ウサギとヤマネの両方の証言が真実だとはあり得ない
solve(It) :-
truth(It),
more_research(It).
?- findall(It,solve(It),All).
All = [[[rabbit, g], [hatman, n], [yamane, n]]].