Я новичок в Haskell, и мне трудно понять, что не так с моим кодом здесь.
Вот что я должен делать:
Рассмотрим следующее определение двоичного дерева
data BinaryTree a = Empty | Node a (BinaryTree a) (BinaryTree a)
Рассмотрим функцию отражения, которая формирует зеркальное отображение двоичного дерева путем замены влево и вправо до конца
reflect :: BinaryTree a -> BinaryTree a
reflect Empty = Empty
reflect (Node x l r) = Node x (reflect r) (reflect l)
Напишите функцию areMirrorImages, которая определяет, удовлетворяют ли два двоичных дерева t и u
т = отражать вас. Функция не должна создавать новые деревья, поэтому она не должна вызывать отражать или Node; хотя он может использовать Node в шаблонах.
Вот что я написал:
areMirrorImages :: BinaryTree a -> BinaryTree a -> Bool
areMirrorImages Empty Empty = True
areMirrorImages (Node _ _ _) Empty = False
areMirrorImages Empty (Node _ _ _) = False
areMirrorImages (Node x l r) (Node y ll rr)
| x==y = ((areMirrorImages l rr) && (areMirrorImages r ll))
| otherwise = False
Когда я пытаюсь запустить его, в строке 49 появляется следующая ошибка:
Не удалось вывести (уравнение) из контекста (), возникающего при использовании '=='
Возможное исправление: добавьте (Eq a) в контекст сигнатуры типа для 'areMirrorImages'
В выражении: x == y
Я не понимаю, почему я получаю эту ошибку, и я пытался найти решения в Интернете, но пока ничего не нашел. Спасибо.