首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有更简单的方法来匹配这个函数?

有没有更简单的方法来匹配这个函数?
EN

Stack Overflow用户
提问于 2021-11-30 04:57:51
回答 1查看 90关注 0票数 0

构建一个函数,该函数接受X和Y的布尔值,并返回命题的布尔值。它的工作方式应该如下

代码语言:javascript
运行
复制
>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

我能想到的唯一解决方法是对每种可能性进行模式匹配(如下所示),但肯定有更好的方法来做到这一点?

代码语言:javascript
运行
复制
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) = ...
EN

回答 1

Stack Overflow用户

发布于 2021-11-30 05:15:04

是的,有一个更好的方法。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
eval a b expr = case expr of
    e :->: e' -> ...
    e :|: e' -> ...
    -- etc.
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70164520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档