【发布时间】:2011-02-16 03:22:44
【问题描述】:
我是 Haskell 的新手,我很难理解我的代码有什么问题。
这是我应该做的:
考虑以下二叉树的定义
data BinaryTree a = Empty | Node a (BinaryTree a) (BinaryTree a)
考虑一下函数reflect,它通过一路向下左右交换形成二叉树的镜像
reflect :: BinaryTree a -> BinaryTree a
reflect Empty = Empty
reflect (Node x l r) = Node x (reflect r) (reflect l)
写一个函数areMirrorImages,判断两棵二叉树t和u是否满足 t = 反映你。该函数不应构建新树,因此不应调用反射或节点;尽管它可能会在模式中使用 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)
可能的解决方法:将 (Eq a) 添加到“areMirrorImages”的类型签名的上下文中
在表达式中:x==y
我对为什么会收到此错误感到困惑,我尝试在网上寻找解决方案,但到目前为止我一无所获。谢谢。
【问题讨论】:
标签: haskell tree compiler-errors typeclass