在 haskell 中切换列表中的每个元素



我必须编写一个函数来切换给定布尔值的列表,例如:

输入 :toggle [True,False,False]

输出:[False,True,True]

这就是我想出的

toggle :: [Bool] -> [Bool]
toggle [a] = not a:[a]
toggle [] = []

我不断收到此错误:

*** Exception: Uebung3.hs:38:1-20: Non-exhaustive patterns in function toggle

这是一个非常基本的问题,我来自Java,刚刚开始学习Haskell。

作为一种模式,[a]是一个单例列表:一个只包含一个元素的列表,a

作为一种类型,[a]a类型值的列表。但不是作为一种模式。

模式(a : as)代表一个非空列表,其中 head 元素a,其余元素as将其用作公式中的模式:

-- toggle [a] = not a:[a]
toggle (a : as) = not a : _______ as
toggle [] = []

您需要通过填写空白来完成它,以使此定义递归。

当定义引用self进行帮助程序调用以继续为其输入的剩余部分执行其工作时,定义是递归的

模式[](空列表)和(a : as)(非空列表)是互斥的。更重要的是,它们加在一起是详尽无遗的:列表值没有其他可能性。

但是[][a]在一起的模式并不详尽:它们不包括两个元素或更长元素列表的情况。[a]模式与(a : [])相同,一个以空列表为尾的列表。

相关内容

  • 没有找到相关文章

最新更新