我正在尝试编写一个如下工作的函数;
连接[a,b,c] ==和a(和b c)
我不确定在哪里做到最好的方法,我假设使用x:xs模式进行列表递归?
答案 0 :(得分:3)
这是一个选项。如果列表中没有元素,那么按惯例它们的连接是True
。你有
conjunction [] = True
如果有多个元素,则该元素为True
,如果该元素为True
,则所有其他元素的合并为True
conjunction (x:xs) = x && conjunction xs
这种特殊模式(一次迭代列表一个元素,并结合二进制函数)在函数编程中非常常见。实际上,它有一个辅助函数,称为foldr
,这是很常见的。所以你可以写
conjunction xs = foldr (&&) True xs
其中第一个参数指定组合函数,第二个参数指定列表为空时的值。
或者您可以使用已定义的功能,例如
conjunction = and
答案 1 :(得分:1)
这是一些基于J. Abrahamson评论的工作代码 -
data MyBool = MyTrue | MyFalse | And MyBool MyBool deriving (Show)
main = do
print $ foldr1 And [MyTrue, MyFalse, MyTrue, MyTrue, MyFalse, MyTrue]
(我假设你的大写“And”是一个构造函数而不是拼写错误....)
这不包括[]的情况,你可以使用模式匹配来提取。