[英]How can I fix my simple Haskell CLI program to show the contents of a file?
[英]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.