Попытка инвертировать двоичное дерево в Хаскеле - PullRequest
1 голос
/ 11 октября 2019

Я недавно начал изучать функциональное программирование и только начал изучать Haskell. Я пытаюсь инвертировать двоичное дерево, и у меня пока есть следующее:

data Tree a = Tip | Bin (Tree a) a (Tree a) deriving (Show,Eq)

mirror :: Tree a -> Tree a
mirror(Bin l v r) = (mirror r) Bin v (mirror l) 

Однако я не совсем понимаю, почему я получаю следующую ошибку: Не удалось найти ожидаемый тип ‘(Tree a0 -> a0 -> Tree a0 -> Tree a0). Кто-нибудь может объяснить, где я запутался?

1 Ответ

4 голосов
/ 11 октября 2019

Вам нужно сначала поместить конструктор данных здесь, поэтому он должен быть:

mirror :: Tree a -> Tree a
mirror(Bin l v r) = <b>Bin</b> (mirror r) v (mirror l) 

Используя (mirror r) Bin v mirror l, вы вызываете Bin в качестве параметра для результата mirror r, поэтому((mirror r) Bin). Но это не имеет особого смысла.

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

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