Хаскелл займет первое и седьмое место - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно написать функцию в 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)

Но это говорит о том, что у него есть «неисчерпывающие паттерны», которые я не понимаю

1 Ответ

0 голосов
/ 04 февраля 2019
... [a, b, c, d, e, f, g, xs] = ...

- это шаблон, который соответствует длинному списку из 8 элементов.xs называет 8-й элемент, а не остальную часть списка.

В случае, если вы вызываете эту функцию со списком из 6, 7, 9 и т. Д. Элементов, шаблон не будет совпадать.

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

- это шаблон, который соответствует списку из 7 элементов или более.xs называет rest списка после его первых 7 элементов.При этом функция по-прежнему не сможет обрабатывать любой список короче 7 элементов.

«Неисчерпывающая» формулировка означает, что наша функция не обрабатывает всех возможных случаев.

...