0263132人目の素数さん
2018/12/05(水) 18:41:20.62ID:8GVLxg9UFazzy version なら可能性 theCase に対して
theCase において X は嘘つきであるか、Xの証言とtheCaseが適合する。
がすべての証人Xについて成立することが条件。
theCase は theCase!!i が i 番目の証人が正直ならTrue, 嘘つきならFalseをとるList。
map not theCase はその True と False をひっくり返したもの。
(map (¥x -> x theCase) ts) は (map (¥x -> x theCase) ts)!!i が i 番目の証人の証言とtheCaseが矛盾しないときにTrue、矛盾するときFalseになるList。
各証人にたいしていずれかが True になることが条件だからそれを zipWith (||) で論理和をとっておいて and ですべて True となっているかを確認しています。
まぁ、ホントはこんな技使うべきではないんですけどね。
可読性落ちるし。
ちなみに
(||) = (証人が嘘つき ∨ 証言とtheCaseが矛盾しない)
のかわりに
(==) = (証人が嘘つきなら証言はtheCaseと矛盾、証人が正直なら証言はtheCaseと適合)
をもちいれば嘘つきが常に嘘つくVersionのsolverになります。