构建一个函数,该函数接受X和Y的布尔值,并返回命题的布尔值。它的工作方式应该如下
>eval False False ((X :->: Y) :&: (Not Y :|: X))
True
>eval False True ((X :->: Y) :&: (Not Y :|: X))
False
>eval True False ((X :->: Y) :&: (Not Y :|: X))
False
>eval True True ((X :->: Y) :&: (Not Y :|: X))
True
我能想到的唯一解决方法是对每种可能性进行模式匹配(如下所示),但肯定有更好的方法来做到这一点?
eval a b (X :|: Y) = a || b
eval a b (X :&: Y) = a && b
eval a b (X :->: Y) = not a || b
eval False False (X :|: X) = ...
eval False False (X :|: Tr) = ....
eval False False (X :|: Fa) = False
eval False False (X :|: Not _) = ...
eval False False (X :|: _ :&: _) = ...
eval False False (X :|: _ :|: _) = ...
eval False False (X :|: _ :->: _) = ...
eval False True (X :|: X) = ...
发布于 2021-11-30 05:15:04
是的,有一个更好的方法。
eval a b (e :->: e') = ...
eval a b (e :|: e') = ...
eval a b (e :&: e') = ...
eval a b (Not e) = ...
eval a b Tr = ...
eval a b Fa = ...
eval a b X = ...
eval a b Y = ...
填充点,你就完成了所有的工作。如果你觉得重复eval a b
很烦人,你可以使用case
eval a b expr = case expr of
e :->: e' -> ...
e :|: e' -> ...
-- etc.
https://stackoverflow.com/questions/70164520
复制相似问题