切换 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 : [])
相同,一个以空列表作为尾部的列表。
我必须编写一个函数来切换给定布尔值列表,例如:
输入: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 : [])
相同,一个以空列表作为尾部的列表。