Почему моя гвардия не хочет вызывать рекурсивную функцию в Haskell - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь сделать рекурсивный вызов в моей программе Haskell. Я хочу вызывать свою функцию каждый раз, когда элемент моего списка совпадает со словом.

Мой код компилируется без проблем, но когда я пытаюсь его выполнить, у меня появляется эта ошибка

haskell: haskell.hs:(27,1)-(30,33): Non-exhaustive patterns in function detect

Моя функция, в которой проблема:

detect :: [[Char]] -> [[Char]] -> [[Char]]
detect (x:xs) b
         | x == "now" || x == "go" = detect xs (SwapP 0 1 b)
         | x == "stop" = detect xs (SwapP 0 (length b - 1) b)
detect (x:xs) b = detect xs b

В x: xs есть мой список слов, а в моем b есть функция, задача которой - изменить положение слова.

Но рекурсив в охранниках не работает.

Самая странная вещь в моей проблеме - когда я пытаюсь сделать то же самое, но за пределами моей охраны, это работает, если я Я делаю

  detect :: [[Char]] -> [[Char]] -> [[Char]]
   detect (x:xs) b = detect xs (SwapP 0 (length b - 1) b)

, это работает, мои первые и последние слова меняются.

Так что, если у кого-то есть идея проблемы, вы можете написать небольшое сообщение. Благодаря.

1 Ответ

1 голос
/ 09 января 2020

По сути, моей проблемой был мой список xs. Я рекурсивно читал весь список и удалял элементы. В конце мой список был без элемента, но моя функция все еще пыталась удалить и проверить содержимое. Итак, чтобы справиться с этим, я просто добавил простой

compares [] b = b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...