Haskell 二叉树的Eq实例
我正在尝试为二叉树创建自己的Haskell 二叉树的Eq实例,haskell,Haskell,我正在尝试为二叉树创建自己的Eq实例: data Tree a = Empty | Node a (Tree a) (Tree a) instance Eq a => Eq (Tree a) where (Empty == Empty) = True (Empty == _) = False (_ == Empty) = False (Node x xl xr) == (Node y yl yr) = (x == y) &&
Eq
实例:
data Tree a = Empty | Node a (Tree a) (Tree a)
instance Eq a => Eq (Tree a) where
(Empty == Empty) = True
(Empty == _) = False
(_ == Empty) = False
(Node x xl xr) == (Node y yl yr) = (x == y) && xl == yl && xr == yr
我收到以下错误消息:
Parse error in pattern: Empty == Empty
您能告诉我哪里错了吗?在定义运算符或函数时,不能使用括号。记住
a ???? b
只是语法上的糖
(????) a b
因此,您的模式应该如下所示:
Empty == Empty = True
Empty == _ = False
_ == Empty = False
Node x xl xr == Node y yl yr = ...
删除括号,
(x==y)
应该是x==y
谢谢,通常这样可以吗?注意:您必须删除最外层图案周围的括号,但应该删除代码中除类型树a
周围的括号以外的所有括号。这些都不是必需的。是的,它是有效的。据我所知,我应该知道何时需要括号?在模式匹配(定义的左侧)中,括号用于对各个参数的结构进行分组。因为==
是一个有两个参数的函数,所以您不应该让参数对包括该函数名在内的所有内容进行分组,否则编译器会感到困惑。