1 haskell
构建一个函数,该函数采用 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
Run Code Online (Sandbox Code Playgroud)
我能想到解决的唯一方法是对每种可能性进行模式匹配(如下所示),但肯定有更好的方法来做到这一点?
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) = ...
Run Code Online (Sandbox Code Playgroud)
是的,有更好的方法。
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 = ...
Run Code Online (Sandbox Code Playgroud)
填写这些点,你就完成了。如果您觉得重复很eval a b烦人,您可以使用case:
eval a b expr = case expr of
e :->: e' -> ...
e :|: e' -> ...
-- etc.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |