[英]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
-type 值的列表。 但不是作为一种模式。
模式(a : as)
代表一个非空列表,其头部元素为a
,其余元素as
。 将其用作等式中的模式:
-- toggle [a] = not a:[a]
toggle (a : as) = not a : _______ as
toggle [] = []
您需要通过填写空白来完成它,以使此定义递归。
定义是递归的,当它们引用self以发出帮助调用以继续为输入的其余部分做他们的工作时。
模式[]
(空列表)和(a : as)
(非空列表)是互斥的。 更多,它们一起是详尽无遗的:列表值没有其他可能性。
但是模式[]
和[a]
一起并不是详尽无遗的:它们不涵盖两个元素或更长的列表的情况。 [a]
模式与(a : [])
,一个以空列表作为尾部的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.