繁体   English   中英

在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 -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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM