切换 haskell 列表中的每个元素

Toggle every element in a list in 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) 代表一个非空列表,其头元素 a 和其余元素 as。使用 it 作为公式中的模式:

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

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

定义是 递归的 当它们引用 self 来为它们的剩余部分调用 时输入。

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

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