【问题标题】:Toggle every element in a list in haskell在haskell中切换列表中的每个元素
【发布时间】:2021-03-04 17:40:29
【问题描述】:

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

输入: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。

【问题讨论】:

  • 其他解决方案,请查看map

标签: list haskell boolean non-exhaustive-patterns


【解决方案1】:

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

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

模式(a : as) 代表一个非空列表,其头部元素为a,其余元素为as。使用 it 作为等式中的模式:

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

你需要通过填空来完成它,使这个定义递归。

当定义引用 self 时,定义是递归的,以便对 continue doing their job 进行辅助调用以获取其输入的其余部分。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多