0

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

例如

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)

但它说它有“非详尽的模式”,我不明白

4

1 回答 1

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

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

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

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

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

“非详尽”措辞意味着我们的函数不能处理所有可能的情况。

于 2019-02-04T15:20:20.313 回答