繁体   English   中英

如何在Haskell中修复处理成对的布尔值的程序?

[英]How can I fix this program dealing with pairs of Booleans in Haskell?

对于初学者Haskell课程中的一项家庭作业,我正在尝试编写一个程序,该程序将获取一对布尔值,并返回来自一对布尔值的布尔值列表,它们之间有一个“ &&”。 例如...

andandbool [(True,True),(True,False),(False,True),(False,False)] 

会返回:

[True, False, False, False]

但是,我一直遇到麻烦。 我的代码如下所示。

andandbool :: [(Bool,Bool)] -> [Bool]
andandbool [a] = [fst x && snd x | x <- [a]]

当我仅提供一对对的列表时,它工作正常,但是当我输入多个对的列表时,报告“功能andandool中的非穷尽模式”。 我缺少某种列表理解吗? 朝正确方向的任何指针将不胜感激。

现在我在电脑上,我将把我的评论变成答案。

当您命名函数[a]的参数时,Haskell会将其解释为与一个元素列表匹配的函数模式。 这就是为什么您的函数仅适用于一个元素列表的原因。 要解决此问题,只需将function参数重命名为名称中没有方括号的内容:

andandbool :: [(Bool,Bool)] -> [Bool]
andandbool as = [fst x && snd x | x <- as]

as参数现在将匹配任何列表。

编辑:就像@Ankur提到的那样,您可以将其简化为:

andandbool as = [x && y | (x, y) <- as]

如果您真的想打代码高尔夫,可以将其简化为:

andandbool = map (uncurry (&&))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM