Шаблоны не совпадают: (_: _: _) - PullRequest
0 голосов
/ 27 октября 2018

Итак, я пытаюсь создать функцию, которая принимает список кортежей и находит кортеж с самым большим вторым элементом. Но я получаю ошибку соответствия шаблона.

Это мой код.

    resultTuple :: [((Int,Int),Int)] -> (Int,Int)
    resultTuple [] = error "something wrong"
    resultTuple [x] = fst(x)
    resultTuple (x:y:xs)
        | snd(x) >= snd(y) = resultTuple(x:xs)
        | snd(x) < snd(y) = resultTuple(y:xs)

Это моя ошибка.

Pattern match(es) are non-exhaustive
In an equation for ‘resultTuple’: Patterns not matched: (_:_:_)

1 Ответ

0 голосов
/ 27 октября 2018

Во всех ваших случаях для x:y:xs есть условие, и компилятор предупреждает вас, что вы не охватили случай, когда все условия ложны.То есть компилятор предупреждает о случае, когда оба значения snd x >= snd y и snd x < snd y являются ложными.

Конечно, это не может произойти, но компилятор этого не осознает.Чтобы избавиться от предупреждения, вы можете просто заменить второе условие на otherwise.

...