Haskell拿第一和第七

Haskell take first and seventh

我需要在 Haskell 中编写一个函数,给定一个至少包含 7 个元素的列表 returns 一个包含第一个和第七个元素的元组。

例如

Prelude> take1and7 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
(1, 7)

我试过了

take1and7 :: [a] -> (a, a)
take1and7 [a, b, c, d, e, f, g, xs] = (a, g)

但是它说它有 "non-exhaustive patterns" 我不明白

... [a, b, c, d, e, f, g, xs] = ...

是一个匹配 8 元素长列表的模式。 xs 命名第 8 个元素,而不是列表的其余部分。

如果您使用包含 6、7、9 等元素的列表调用此函数,则模式将不匹配。

... (a: b: c: d: e: f: g: xs) = ...

是一个匹配 7 个或更长元素列表的模式。 xs 在列表的前 7 个元素之后命名列表的 rest。有了它,该函数仍然无法处理任何少于 7 个元素的列表。

"non-exhaustive" 措辞意味着我们的函数不处理所有 可能的情况。